Go-Micro注册服务consul安装和使用
简介Go-Micro注册服务consul安装和使用
1、微服务主要是一个服务多台服务器进行支持,服务之间相互调用,但是我们调用微服务的时候,我们需要知道对应的服务的地址,那么这里就需要注册中心,将所有微服务的的地址都注册到注册中心,调用服务之前先去注册中心去获取对应服务的地址。
2、常用的注册中:consul、etcd、zookeeper等,这里我们先使用consul
3、consul的安装(本地测试推荐使用docker安装或者直接启用调试模式单机版本)
####单机版
consul agent -dev
####集群版
集群部署:
192.168.1.171
nohup ./consul agent -server -bind=192.168.1.171 -client=0.0.0.0 -bootstrap-expect=3 -data-dir=data -node=server-1 -ui &
192.168.1.177
nohup ./consul agent -server -bind=192.168.1.177 -client=0.0.0.0 -bootstrap-expect=3 -data-dir=data -node=server-2 -ui &
192.168.1.178
nohup ./consul agent -server -bind=192.168.1.178 -client=0.0.0.0 -bootstrap-expect=3 -data-dir=data -node=server-3 -ui &
在另外两台上执行后面命令加入到集群: ./consul join 192.168.1.171
添加服务【PUT】:
{
"id": "test04",
"name": "test04",
"tags": [
""
],
"address": "127.0.0.1",
"port": 3010,
"check": {
"deregisterCriticalServiceAfter": "90m",
"http": "http://192.168.1.171:8889/",
"interval": "10s"
}
}
删除无效的注册【PUT】:http://192.168.1.178:8500/v1/agent/service/deregister/服务名称
4、安装go-micro插件
go get -u github.com/micro/go-plugins
5、注册到consul
package main
import (
"github.com/gin-gonic/gin"
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/web"
"github.com/micro/go-plugins/registry/consul"
)
func main() {
//注册
registry := consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
"192.168.1.171:8500",
"192.168.1.177:8500",
"192.168.1.178:8500",
}
})
routers := gin.Default()
routers.GET("/", func(context *gin.Context) {
context.JSON(200, map[string]interface{}{
"name": 1,
})
})
routers.GET("/version", func(context *gin.Context) {
context.JSON(200, map[string]interface{}{
"version": "1.0.0",
})
})
server := web.NewService(
web.Name("gin-web"), //服务名称
web.Registry(registry), //注册到服务
//web.Address(":8080"),//这个可以不写,最好使用配置文件进行配置
web.Handler(routers),
)
server.Init() //加了这句就可以使用命令行的形式去设置我们一些启动的配置
server.Run()
}
运行成功后
6、查看命令行帮助
go run xxx.go --help
命令行文件在:
gomod目录\pkg\mod\github.com\micro\go-micro@v1.18.0\config\cmd\cmd.go
指定端口运行
go run xxx.go --server_address=:8080
7、Windows批处理命令运行多个服务
@echo off
start cmd /k "cd/d E:\go\micro-product &&go run reg-consul.go --server_address=:50001"
start cmd /k "cd/d E:\go\micro-product &&go run reg-consul.go --server_address=:50002"
start cmd /k "cd/d E:\go\micro-product &&go run reg-consul.go --server_address=:50003"
结束的时候一定要使用ctrl+c,否则会出现注册的服务删不掉
8、获取注册的服务信息(随机获取)
package main
import (
"fmt"
"github.com/micro/go-micro/client/selector"
"github.com/micro/go-micro/registry"
"github.com/micro/go-plugins/registry/consul"
"log"
)
func main() {
registry := consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
"192.168.1.171:8500",
"192.168.1.177:8500",
"192.168.1.178:8500",
}
})
//获取服务
services, err := registry.GetService("gin-web")
if err != nil {
log.Fatal(err)
}
next := selector.Random(services) //随机从服务中获取
//next := selector.RoundRobin(services) //轮询算法
node, err := next() //返回是一个函数
if err != nil {
log.Fatal(err)
}
fmt.Println("NODE ID:", node.Id)
fmt.Println("ADDRESS:", node.Address)
fmt.Println("METADATA:", node.Metadata)
}
常见的负载均衡算法包含:
1、轮询法(Round Robin)
2、加权轮询法(Weight Round Robin)
3、随机法(Random)
4、加权随机法(Weight Random)
5、平滑加权轮询法(Smooth Weight Round Robin)
6、源地址哈希法(Hash)
7、最小连接数法(Least Connections)
Mysql in 多个字段的用法
Windows上搭建Flutter环境
图像的腐蚀与膨胀互为逆向操作,通常用于处理二值图像(黑白图,以黑色为底面背景),因此需要先进行二值化处理,腐蚀和膨胀通俗的理解就是,在指定大小的卷积核内,如果该卷积核内全为黑色或全为白色,则该卷积核内像素值不变,但若是既有黑色又有白色,即在图像边缘处,那么膨胀操作则会将该卷积核内所有白色像素点都赋值变为黑色,以此将图像向内腐蚀掉一圈,而膨胀操作则相反,会将卷积核内的黑色像素点赋值成2白色,以此让图像膨胀一圈。
Mysql二进制日志文件是非常重要,记录了所有对MySQL数据库的修改事件,包括增删改查事件和对表结构的修改事件,所以本文主要记录Mysql二进制文件如何开启和类型。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题