最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解go-micro微服務(wù)consul配置及注冊(cè)中心

 更新時(shí)間:2023年01月10日 11:19:18   作者:夏沫的夢(mèng)  
這篇文章主要為大家介紹了go-micro微服務(wù)consul配置及注冊(cè)中心示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一 Consul介紹

Consul是HashiCorp公司推出的開源工具,用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置。 Consul是分布式的、高可用的、可橫向擴(kuò)展的。

1. 注冊(cè)中心Consul基本介紹

  • Consul是一種服務(wù)網(wǎng)格解決方案
  • 提供具有服務(wù)發(fā)現(xiàn),配置和分段功能的全功能控制平面
  • Consul 附帶-個(gè)簡(jiǎn)單的內(nèi)置代理,可以開箱即用

2.注冊(cè)中心Consul關(guān)鍵功能

服務(wù)發(fā)現(xiàn):

  • 客戶端可以注冊(cè)服務(wù),程序可以輕松找到它們所依賴的服務(wù)

運(yùn)行狀況檢查:

  • Consul客戶端可以提供任意數(shù)量的運(yùn)行狀況檢查

KV 存儲(chǔ):

  • 應(yīng)用程序可以將Consul的層級(jí)鍵/值存儲(chǔ)用于任何目的,包括動(dòng)態(tài)配置,功能標(biāo)記,協(xié)調(diào),領(lǐng)導(dǎo)者選舉等

安全服務(wù)通信:

  • Consul 可以為服務(wù)生成和分發(fā)TLS證書,建立相互的TLS連接

多數(shù)據(jù)中心:

  • Consul 支持多個(gè)數(shù)據(jù)中心

3.注冊(cè)中心Consul兩個(gè)重要協(xié)議

  • Gossip Protocol (八卦協(xié)議)
  • Raft Protocol ( 選舉協(xié)議)

對(duì)于想要學(xué)習(xí)Consul原理的,可以自行百度詳細(xì)了解這兩個(gè)協(xié)議。

二 Consul安裝

1.使用docker拉取鏡像

  • 打開終端,輸入以下命令:
docekr pull consul

等待一段時(shí)間后拉取成功

  • 啟動(dòng)命令:
docker run -d -p 8500:8500 consul

consul會(huì)被運(yùn)行在本機(jī)的8500端口上

  • 檢查是否運(yùn)行
docker ps
  • 可視化界面

打開瀏覽器,輸入http://127.0.0.1:8500

三 Config配置

  • 在config目錄下新建一個(gè)config.yaml

可以把配置相關(guān)信息先放在config.yaml里,之后放在consul中。

  • 編寫代碼:
name: "Account"
title: "賬號(hào)功能"
mode: "dev"
port: 9580
version: "v0.0.1"
log:
  level: "debug"
  filename: "Account.log"
  max_size: 200
  max_age: 30
  max_backips: 7
mysql:
  host: "127.0.0.1"
  port: 3306
  user: "root"
  password: "xxx"
  dbname: "micro"
  max_open_conns: 200
  max_idle_conns: "50"
redis:
  host: "127.0.0.1"
  port: 6379
  password: "xxx"
  db: 4
  pool_size: 100
email:
  user: "xxx@qq.com"
  pass: "xxx"
  host: "smtp.qq.com"
  port: 465
  rename: "Account"
# 配置、注冊(cè)中心
consul:
  host: "localhost"
  port: 8500
  prefix: "/micro/config"
  consulRegistry: "127.0.0.1:8500"
# 鏈路追蹤
jaeger:
  serviceName: "go.micro.service.account"
  addr: "localhost:6831"
# 監(jiān)控服務(wù)
prometheus:
  host: "0.0.0.0"
  port: 9089
# 限流
ratelimit:
  QPS: 1000
# 微服務(wù)
micro:
  name: "go.micro.service.account"
  version: "latest"
  address: ":9580"
  • 注意,以下字段自行修改:
    • mysql.password
    • redis.password
    • email.user
    • email.pass

四 Consul代碼編寫

  • 在micro目錄下新建一個(gè)consul.go文件

1.設(shè)置consul配置中心

// GetConsulConfig 設(shè)置配置中心
func GetConsulConfig(host string, port int64, prefix string) (config.Config, error) {
   consulSource := consul.NewSource(
      //設(shè)置配置中心的地址
      consul.WithAddress(host+":"+strconv.FormatInt(port, 10)),
      //設(shè)置前綴,不設(shè)置默認(rèn)前綴 /micro/config
      consul.WithPrefix(prefix),
      //是否移除前綴,這里是設(shè)置為true,表示可以不帶前綴直接獲取對(duì)應(yīng)配置
      consul.StripPrefix(true),
   )
   //配置初始化
   newConfig, err := config.NewConfig()
   if err != nil {
      return newConfig, err
   }
   //加載配置
   err = newConfig.Load(consulSource)
   return newConfig, err
}

2.獲取consul配置中心的數(shù)據(jù)

  • 編寫結(jié)構(gòu)體(嵌套結(jié)構(gòu))
type Account struct {
   Name    string `json:"name"`
   Title   string `json:"title"`
   Mode    string `json:"mode"`
   Port    int64  `json:"port"`
   Version string `json:"version"`
}
type Mysql struct {
   Host     string `json:"host"`
   User     string `json:"user"`
   Pwd      string `json:"pwd"`
   Database string `json:"database"`
   Port     int64  `json:"port"`
}
type Log struct {
   Level string `json:"level"`
   Filename string `json:"filename"`
   MaxSize int64 `json:"max_size"`
   MaxAge int64 `json:"max_age"`
   MaxBackips int64 `json:"max_backips"`
}
type Redis struct {
   Host string `json:"host"`
   Port int64 `json:"port"`
   Password string `json:"password"`
   Db int64 `json:"db"`
   PoolSize int64 `json:"pool_size"`
}
type Email struct {
   User string `json:"user"`
   Pass string `json:"pass"`
   Host string `json:"host"`
   Port int64 `json:"port"`
   Rename string `json:"rename"`
}
type Consul struct {
   Host string `json:"host"`
   Port int64 `json:"port"`
   Prefix string `json:"prefix"`
   ConsulRegistry string `json:"consulRegistry"`
}
type Jaeger struct {
   ServiceName string `json:"serviceName"`
   Addr string `json:"addr"`
}
type Prometheus struct {
   Host string `json:"host"`
   Port int64 `json:"port"`
}
type Ratelimit struct {
   QPS int64 `json:"QPS"`
}
type Micro struct {
   Name string `json:"name"`
   Version string `json:"version"`
   Address string `json:"address"`
}
type ConsulConfig struct {
   Account Account `json:"account"`
   Mysql Mysql `json:"mysql"`
   Log Log `json:"log"`
   Redis Redis `json:"redis"`
   Email Email `json:"email"`
   Consul Consul `json:"consul"`
   Jaeger Jaeger `json:"jaeger"`
   Prometheus Prometheus `json:"prometheus"`
   Ratelimit Ratelimit `json:"ratelimit"`
   Micro Micro `json:"micro"`
}
  • 獲取consul數(shù)據(jù)
var(
   ConsulInfo *ConsulConfig
)
// GetAccountFromConsul 獲取 consul 的配置
func GetAccountFromConsul(config config.Config, path ...string) error {
   consulData := &ConsulConfig{}
   config.Get(path...).Scan(consulData)
   ConsulInfo = consulData
   return nil
}

3.consul可視化界面數(shù)據(jù)編寫

點(diǎn)擊Key/Value,再點(diǎn)擊Create

  • 輸入項(xiàng)目名稱: micro/config/account

選擇JSON

  • 輸入以下代碼:
{
"account":{
"name": "Account",
"title": "賬號(hào)功能",
"mode": "dev",
"port": 9580,
"version": "v0.0.1"
},
"log":{
"level": "debug",
"filename": "Account.log",
"max_size": 200,
"max_age": 30,
"max_backips": 7
},
"mysql":{
"host":"127.0.0.1",
"user":"root",
"pwd":"xxx",
"database":"micro",
"port":3306
},
"redis":{
"host": "127.0.0.1",
"port": 6379,
"password": "123456",
"db": 4,
"pool_size": 100
},
"consul":{
"host": "localhost",
"port": 8500,
"prefix": "/micro/config",
"consulRegistry": "127.0.0.1:8500"
},
"email":{
"user": "xxx@qq.com",
"pass": "xxx",
"host": "smtp.qq.com",
"port": 465,
"rename": "Account"
},
"jaeger":{
"serviceName": "go.micro.service.account",
"addr": "localhost:6831"
},
"prometheus":{
"host": "0.0.0.0",
"port": 9089
},
"ratelimit":{
"QPS": 1000
},
"micro":{
"name": "go.micro.service.account",
"version": "latest",
"address": ":9580"
}
}
  • 注意JSON格式,點(diǎn)擊Save

4. main.go代碼編寫

// 1.配置中心
consulConfig, err := micro.GetConsulConfig("localhost", 8500, "/micro/config")
if err != nil {
   fmt.Printf("Init consulConfig failed, err: %v\n", err)
}
// 2.注冊(cè)中心
consulRegistry := consul.NewRegistry(func(options *registry.Options) {
   options.Addrs = []string{
      "127.0.0.1:8500",
   }
})
if err := micro.GetAccountFromConsul(consulConfig, "account"); err != nil {
   fmt.Printf("Init consul failed, err: %v\n", err)
}
fmt.Println(micro.ConsulInfo)
  • 這時(shí)候,micro中的ConsulInfo可以用來(lái)使用consul中的數(shù)據(jù)了,使用 . 取數(shù)據(jù)

五 最后

  • 至此,go-micro微服務(wù)consul配置、注冊(cè)中心開發(fā)工作就正式完成。
  • 接下來(lái)就開始Mysql的代碼編寫了,希望大家關(guān)注博主和關(guān)注專欄,第一時(shí)間獲取最新內(nèi)容,每篇博客都干貨滿滿。

以上就是詳解go-micro微服務(wù)consul配置及注冊(cè)中心的詳細(xì)內(nèi)容,更多關(guān)于go micro consul配置注冊(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang AGScheduler動(dòng)態(tài)持久化任務(wù)調(diào)度的強(qiáng)大庫(kù)使用實(shí)例

    Golang AGScheduler動(dòng)態(tài)持久化任務(wù)調(diào)度的強(qiáng)大庫(kù)使用實(shí)例

    這篇文章主要為大家介紹了Golang AGScheduler動(dòng)態(tài)持久化任務(wù)調(diào)度的強(qiáng)大庫(kù)使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Go 實(shí)現(xiàn)熱重啟的詳細(xì)介紹

    Go 實(shí)現(xiàn)熱重啟的詳細(xì)介紹

    這篇文章主要介紹了Go 實(shí)現(xiàn)熱重啟的詳細(xì)介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪問(wèn)的機(jī)制,ZooKeeper?和?Redis?都是常用的實(shí)現(xiàn)分布式鎖的工具,本文就來(lái)使用Zookeeper實(shí)現(xiàn)分布式鎖,希望對(duì)大家有所幫助
    2024-02-02
  • golang中context使用小結(jié)

    golang中context使用小結(jié)

    本文主要介紹了golang中context使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 解決goland新建項(xiàng)目文件名為紅色的問(wèn)題

    解決goland新建項(xiàng)目文件名為紅色的問(wèn)題

    這篇文章主要介紹了解決goland新建項(xiàng)目文件名為紅色的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 一文帶你掌握Go語(yǔ)言中的時(shí)間處理操作

    一文帶你掌握Go語(yǔ)言中的時(shí)間處理操作

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中的時(shí)間處理操作的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2026-04-04
  • Golang如何使用go.mod配置加載本地模塊

    Golang如何使用go.mod配置加載本地模塊

    這篇文章主要介紹了Golang如何使用go.mod配置加載本地模塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Go語(yǔ)言遍歷循環(huán)的幾種方法

    Go語(yǔ)言遍歷循環(huán)的幾種方法

    遍歷循環(huán)主要用于迭代數(shù)組、切片、映射(map)、字符串等數(shù)據(jù)結(jié)構(gòu),本文主要介紹了Go語(yǔ)言遍歷循環(huán)的幾種方法,下面就來(lái)介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 一文詳細(xì)介紹golang中.()類型斷言的使用方法

    一文詳細(xì)介紹golang中.()類型斷言的使用方法

    Golang是一門非常流行的編程語(yǔ)言,在很多領(lǐng)域都有著廣泛的應(yīng)用,在開發(fā)過(guò)程中,很多時(shí)候我們需要將函數(shù)作為參數(shù)傳遞給其他函數(shù),這時(shí)候就需要用到golang中的.()用法,本文將詳細(xì)介紹golang中.()的使用方法,需要的朋友可以參考下
    2023-08-08
  • Go語(yǔ)言并發(fā)爬蟲的具體實(shí)現(xiàn)

    Go語(yǔ)言并發(fā)爬蟲的具體實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言并發(fā)爬蟲的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論

平潭县| 攀枝花市| 阿荣旗| 土默特左旗| 南靖县| 原阳县| 前郭尔| 成武县| 东乡族自治县| 宽甸| 南昌县| 鹿邑县| 揭西县| 台东县| 大丰市| 龙岩市| 三门峡市| 芦山县| 樟树市| 即墨市| 郑州市| 苏尼特右旗| 靖西县| 成都市| 沂源县| 浑源县| 平舆县| 襄垣县| 青州市| 锦屏县| 龙山县| 略阳县| 利川市| 铁岭市| 老河口市| 新河县| 常德市| 罗山县| 探索| 巴林右旗| 泉州市|