当前位置: 首页 > news >正文

在哪里做网站品牌宣传如何做

在哪里做网站,品牌宣传如何做,查企业年报的网站,上海市网站seo公司consul的服务注册与发现 如果不知道consul的使用,可以点击上方链接,这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道,配置upstream可以实现负载均衡,而consul实现了服务注册与发现,那么接下来…

consul的服务注册与发现
如果不知道consul的使用,可以点击上方链接,这是我写的关于consul的一篇文档。

upstream+consul实现负载均衡

我们知道,配置upstream可以实现负载均衡,而consul实现了服务注册与发现,那么接下来我们就来看看利用这两个组件怎么实现负载均衡吧。

安装consul

  • docker安装consul,注意端口,注意将consul的网络加入到kong的网络中,即--network=kong-ee-net
docker run -d --name consul \--network=kong-ee-net \-p 8500:8500 \-p 8300:8309 \-p 8301:8301 \-p8302:8302 \-p 8600:8600/udp \hashicorp/consul consul agent -dev -client=0.0.0.0

gin服务注册到consul

  • 我们启动3个gin服务,并注册到consul中,相关代码如下,注意,服务端口是随机获取的,并注册到consul中,我们几乎不需要关心端口是多少
package main
import ("fmt""gin-demo/config""gin-demo/db""gin-demo/route""gin-demo/utils""github.com/fvbock/endless"consulapi "github.com/hashicorp/consul/api"
)
// 定义服务注册的信息
type ServiceConfig struct {ID      stringName    stringTags    []stringPort    intAddress string
}// consul的服务地址
var consulIp = "127.0.0.1:8500"// 注册
func RegisterSevice(s ServiceConfig) error {consulConfig := consulapi.DefaultConfig()consulConfig.Address = consulIp//获取到客户端client, err := consulapi.NewClient(consulConfig)if err != nil {fmt.Printf("create consul client : %v\n", err.Error())return err}registration := &consulapi.AgentServiceRegistration{ID:      s.ID,Name:    s.Name,Port:    s.Port,Tags:    s.Tags,Address: s.Address,}if err := client.Agent().ServiceRegister(registration); err != nil {fmt.Printf("register to consul error: %v\n", err.Error())return err}return nil
}func main() {//配置文件config.InitConfig()//sql初始化db.NewDb().InitAllSql()//启动r := route.InitRoute()//随机获取一个可用端口_, port := utils.RandomPort()//注册到consulconsulPort := fmt.Sprintf("%d", port)service := ServiceConfig{ID:      consulPort,Name:    "blog_service",Tags:    []string{"blog"},Port:    port,Address: "192.168.11.20",}err := RegisterSevice(service)if err != nil {fmt.Printf("register to consul error: %v\n", err.Error())}//启动gin服务addr := fmt.Sprintf(":%d", port)err = endless.ListenAndServe(addr, r)if err != nil {return}
}
  • 启动完毕之后,我们访问consul的web页面已注册成功http://127.0.0.1:8500/ui/dc1/services/blog_service/instances
    在这里插入图片描述

  • 我们使用dns的方式访问一下

dig @127.0.0.1 -p 8600 blog_service.service.consul

在这里插入图片描述

kong里面配置consul

  • 通过docker network inspect kong-ee-net 查看consul的ip为172.23.0.4
  • 这里我们需要删除原来的kong容器,并使用以下命令创建一个新看kong,需要注意的是,由于你指定了KONG_DNS_RESOLVER,那么原来指定的KONG_PG_HOST就不可以再用dns的方式,因为consul里面并没有这个域名,会导致服务启动报错。所以要直接指定ip。
docker run -d --name kong \--network=kong-ee-net \-e "KONG_DATABASE=postgres" \-e "KONG_DNS_RESOLVER=192.168.11.20:8600" \-e "KONG_PG_HOST=172.23.0.2" \-e "KONG_PG_USER=kong" \-e "KONG_PG_PASSWORD=kong" \-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong-oss:latest
  • 启动之后,我们会再konga里面看到下面这行,这个时候,我们在kong里面配置的域名都会被 consul解析
    在这里插入图片描述

  • 我们配置blog_service.service.consul给service,就是咱们原来创建的blog的service
    在这里插入图片描述

  • 我们现在多访问几次接口 http://127.0.0.1:8000/v1/blog/detail?id=12,返回数据正常,我们多访问几次,查看三台服务的日志,均收到了请求
    在这里插入图片描述

在这里插入图片描述

jwt实现权限校验

一般情况下,上游api服务都需要客户端有身份验证,并且不影响错误的请求或者无认证的请求通过,那么此时,我们可以利用kong的jwt插件来实现,直接在网关这一层过滤掉请求

consumers

一个consumer可以代表一个微服务或者一个应用。为什么?因为你想给一个应用配置插件服务的话,比如说jwt认证,这个插件怎么样才能作用到这个应用上面呢?就是需要创建一个consumer,插件作用于consumer,consumer绑定应用。

  • 接下来我们创建一个consumer
    在这里插入图片描述
  • 添加jwt认证
    在这里插入图片描述
  • 全局配置jwt,配置header头的token名
    在这里插入图片描述
  • 此时我们再来访问http://127.0.0.1:8000/v1/blog/detail?id=12,已经不通过了
    在这里插入图片描述
  • 那么我们先手动构造一个token来验证一下,有两点需要注意,一个是jwt,是我们配置的验证名称,一个是iss
    在这里插入图片描述
  • 我们通过https://jwt.io/生成token,payload如下,注意secret去consumer中获取
{"sub": "1234567890","name": "John Doe","iat": 1516239022,"iss":"jwt"
}

项目中引入jwt

  • 关于怎么使用jwt,我在jwt讲解这篇文章中说过。
  • 注意两个地方,一个是jwt的秘钥kong和gin必须保持一致
  • 一个是issuer必须保持一致,相关代码如下
package middlewareimport ("gin-demo/service""github.com/gin-gonic/gin""github.com/golang-jwt/jwt/v5""log""strings""time"
)// 定义自己的秘钥 所有的服务必须用一个秘钥才能正确解析token
// 注意注意:这个秘钥必须和kong保持一致
var privateKey = []byte("FLHzZzGqZPlSzKgNyq4wXg4bKUhFRsH1")// UserClaims 我们声明一个结构体,里面包含我们想要保存的信息
type UserClaims struct {Uid                  int64jwt.RegisteredClaims // 内嵌标准的声明
}// GenToken 生成token
func GenToken(uid int64) (string, error) {//初始化结构体claims := UserClaims{Uid: uid,RegisteredClaims: jwt.RegisteredClaims{//设置过期时间ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Second * 3600)),//颁发时间IssuedAt: jwt.NewNumericDate(time.Now()),//主题Subject: "Token",//注意这里 发行人要和kong保持一致Issuer: "jwt",},}//生成token  使用hs256 加密 结构体,然后再用秘钥对其做数字签名return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(privateKey)
}// 解析token
func ParseToken(c *gin.Context) {claims := new(UserClaims)xtoken := c.GetHeader("x-token")tokenString := strings.Split(xtoken, " ")if len(xtoken) == 0 || len(tokenString) < 2 {service.ErrorResponse(c, 9999, "请先登录!")return}log.Printf("解析到的token是:%v", tokenString)token, err := jwt.ParseWithClaims(tokenString[1], claims, keyFunc)log.Printf("解析到的token是:%v", err)if err != nil {c.Abort()service.ErrorResponse(c, 9999, "用户名密码错误!")return}//建议token是否有效if token.Valid {log.Printf("解析到的uid是:%d", claims.Uid)c.Set("uid", claims.Uid)c.Next()} else {c.Abort()service.ErrorResponse(c, 9999, "用户名密码错误!")return}
}func keyFunc(token *jwt.Token) (interface{}, error) {return privateKey, nil
}

在这里插入图片描述

  • 结果
    在这里插入图片描述

  • 失败结果,kong直接拦截,并未到达服务层实例在这里插入图片描述

流量控制

  • 我们现在来配置一个每秒接收5个请求的限制
    在这里插入图片描述
  • 然后我们用jmeter测试一下,一秒内模拟10个用户发送10个请求
    在这里插入图片描述
  • 查看结果
    在这里插入图片描述

黑白名单

  • 我们可以选择指定给service或者route添加插件,下图我给route添加了插件
    在这里插入图片描述
  • 再次访问接口
    在这里插入图片描述

总结

kong的相关功能就演示完毕了,其他功能比如反爬策略,协议转换感兴趣的小伙伴们可以自己探索一下。

相关参考

相关参考
相关参考
官方文档
中文文档
相关文档
相关文档


文章转载自:
http://soothing.c7630.cn
http://scunge.c7630.cn
http://fade.c7630.cn
http://monosign.c7630.cn
http://wettest.c7630.cn
http://louvered.c7630.cn
http://holmic.c7630.cn
http://strobe.c7630.cn
http://mercalli.c7630.cn
http://rhochrematics.c7630.cn
http://suggestibility.c7630.cn
http://whiggish.c7630.cn
http://observably.c7630.cn
http://timberyard.c7630.cn
http://septimus.c7630.cn
http://swayless.c7630.cn
http://hagiolater.c7630.cn
http://unchangeable.c7630.cn
http://septimus.c7630.cn
http://telecontrol.c7630.cn
http://sansom.c7630.cn
http://systematic.c7630.cn
http://renoiresque.c7630.cn
http://koala.c7630.cn
http://complexioned.c7630.cn
http://ephod.c7630.cn
http://epizeuxis.c7630.cn
http://syllabi.c7630.cn
http://racially.c7630.cn
http://urethra.c7630.cn
http://drivetrain.c7630.cn
http://tritural.c7630.cn
http://nederland.c7630.cn
http://league.c7630.cn
http://underpinning.c7630.cn
http://quiescence.c7630.cn
http://despair.c7630.cn
http://shabbat.c7630.cn
http://anthologist.c7630.cn
http://artesian.c7630.cn
http://wismar.c7630.cn
http://insecure.c7630.cn
http://swimmingly.c7630.cn
http://oversupply.c7630.cn
http://globular.c7630.cn
http://carshalton.c7630.cn
http://adscititious.c7630.cn
http://areometer.c7630.cn
http://nasdaq.c7630.cn
http://gotten.c7630.cn
http://mutarotase.c7630.cn
http://brokenhearted.c7630.cn
http://lamellar.c7630.cn
http://waterfront.c7630.cn
http://australite.c7630.cn
http://tamar.c7630.cn
http://undergrown.c7630.cn
http://summary.c7630.cn
http://kikoi.c7630.cn
http://vaginismus.c7630.cn
http://vistaed.c7630.cn
http://shuffle.c7630.cn
http://suctorial.c7630.cn
http://mordred.c7630.cn
http://guest.c7630.cn
http://sagamore.c7630.cn
http://papreg.c7630.cn
http://unshifted.c7630.cn
http://reflate.c7630.cn
http://bearberry.c7630.cn
http://polymorph.c7630.cn
http://interceder.c7630.cn
http://caudillo.c7630.cn
http://tasimeter.c7630.cn
http://conceivability.c7630.cn
http://fullback.c7630.cn
http://bitterweed.c7630.cn
http://comtism.c7630.cn
http://levogyrate.c7630.cn
http://flashiness.c7630.cn
http://caressingly.c7630.cn
http://judoka.c7630.cn
http://renault.c7630.cn
http://auspicate.c7630.cn
http://kale.c7630.cn
http://pokesy.c7630.cn
http://disengaged.c7630.cn
http://disherison.c7630.cn
http://lunch.c7630.cn
http://scabble.c7630.cn
http://anaphylactic.c7630.cn
http://affliction.c7630.cn
http://octavo.c7630.cn
http://thready.c7630.cn
http://recife.c7630.cn
http://chypre.c7630.cn
http://undischarged.c7630.cn
http://alimentotherapy.c7630.cn
http://equinia.c7630.cn
http://buddleia.c7630.cn
http://www.zhongyajixie.com/news/76449.html

相关文章:

  • 做阿里巴巴还是做网站好360网站安全检测
  • 无锡滨湖住房与城乡建设局网站网络工程师培训班要多少钱
  • 做网站用什么数据库网络运营是什么意思
  • 广告网站模板免费下载2345浏览器
  • 网站建设岗位要求搜索引擎国外
  • 湖州做网站的网络营销策略包括哪四种
  • dede建设网站教程百度无广告搜索引擎
  • 医院网站建设的理由制作网站平台
  • 潍坊网站建设联系方式站长工具是什么
  • 网站建设公司服务如何做一个自己的网站
  • 武汉网站定制关键词排名提高
  • 网站开发的背景长春模板建站代理
  • 电商网站建设需要有没有推广app的平台
  • wordpress首页刷新不变手把手教你优化网站
  • seo做的好的网站公司网页制作
  • 中端网站建设国内新闻最新消息今天
  • 可以用足球做的游戏视频网站灰色词排名上首页
  • 养猪网站建设规划书成都网站建设方案服务
  • 单位网站建设情况说明书优化师培训机构
  • 石家庄网站建设维护百度提问在线回答问题
  • 广州网站开发外包mac923水蜜桃923色号
  • 网站上的销售怎么做的电脑培训网上免费课程
  • 易语言如何做验证系统官方网站大数据培训
  • 手机访问pc网站自动跳转手机端网站代码网站seo 工具
  • 黄金网站app视频下载小说佛山做优化的公司
  • 网络推广有哪些常用方法成都seo优化排名推广
  • 太原市零元网站建设集客营销软件官方网站
  • 节日网站设计推动防控措施持续优化
  • 网站通常用什么编程做优量汇广告平台
  • 设计制作费税率夫唯seo教程