在Fargate中使用ZeroMQ Golang

问题描述 投票:0回答:1

我正在尝试在awsvpc模式下在Fargate上运行的ECS中使用ZeroMQ。我有2个不同的服务,每个服务都运行自己的任务并启用了服务发现。

我在称为代理的微服务中创建路由器和经销商。

front, _ := zmq.NewSocket(zmq.ROUTER)
defer front.Close()
front.Bind("tcp://*:4070")

back, _ := zmq.NewSocket(zmq.DEALER)
defer back.Close()
back.Bind("tcp://*:4080")

然后,我将这两个套接字添加到轮询器,并具有一个for循环,用于等待消息。

我有一个单独的微服务,该微服务连接到套接字并尝试向经销商发送消息。我已经设置了服务发现,所以我假设我连接的地址为:

“ tcp:// broker:4070”

下面是来自“ serviceA”的代码

func New(ZMQ models.ZMQ) *Requester {
    s, err := zmq.NewSocket(zmq.REQ)
    if err != nil {
        log.Fatalln("shareholder/requester zmq.NewSocket", err)
    }
    p := zmq.NewPoller()
    p.Add(s, zmq.POLLIN)

    log.Println("Requester", ZMQ.Req)
    err = s.Connect("tcp://broker:4070")
    if err != nil {
        log.Print(fmt.Errorf("err is %w", err))
    }

    req := &Requester{
        Poller:  p,
        Retries: 2,
        Socket:  s,
        Timeout: time.Duration(time.Minute),
    }
    runtime.SetFinalizer(req, (*Requester).Close)
    return req
}

然后我使用上面的代码通过套接字连接发送消息

_, err := r.Socket.SendMessage(req)

但是,我的经纪人服务从未收到我的消息。我可以使用在服务发现期间注册的主机名在网络上访问我的REST API,在此缺少Fargate / ECS / ZeroMQ吗?

go microservices zeromq amazon-ecs aws-fargate
1个回答
-1
投票

我将我的想法描述为答案,我相信我们可以解决您的问题。

所以我认为这是您的设置。

Setup services

服务A

  • [nginx通过backend呼叫backend:9000
  • [backend通过nginx呼叫nginx:80

服务A到B

  • [nginx 无法通过broker1:4070致电Broker1
  • 仅指定名称:端口nginxbackend都无法调用broker1broker2

如果容器运行在不同的服务中,并且每个服务都有自己的awsvpc,则不能仅通过指定name:port来调用它们。

您需要从A到B的连接跨服务,这意味着您需要适当的服务发现。

© www.soinside.com 2019 - 2024. All rights reserved.