在Consul注册的微服务随机端口

时间:2016-12-22 16:31:20

标签: microservices consul

注意:我不是在询问Consul HTTP端口8500.我可以调用微服务公开的API,使用Consul发现,只需通过.service.consul / WITHOUT指定端口号吗?

我正在使用Consul来发现微服务的多个版本。这个微服务(用Java编写)具有预定的端口:

在consul注册的服务为 - my-service.service.consul(服务端口是,让我们说3030)。我在consul注册了相同的微服务的另一个版本:my-servicev2.service.consul(port 3033)。

服务定义(为示例而更改):

 {
    "Address": <IP address>,
    "CreateIndex": 111,
    "ModifyIndex": 000,
    "Node": <node name>,
    "ServiceAddress": "",
    "ServiceEnableTagOverride": false,
    "ServiceID": "my-servicev2",
    "ServiceName": "my-servicev2",
    "ServicePort": 3033,
    "ServiceTags": [
        "v2"
    ],
    "TaggedAddresses": {
        "lan": <LAN IP>,
        "wan": <WAN IP>
    }
}

我可以使用dig @localhost my-service.service.consul' or ping -c2 my-service.service.consul`

ping并挖掘服务

但是,如何在不明确使用ServicePort的情况下访问此微服务公开的API之一?

以下是有效的方法:

curl http://my-servicev2.service.consul:3033/health -> resolves the service name, maps it to one of the deployed VM IP, and gives back the API response. In this case something like: `{"build"`: 'OK"}`

但是,我应该能够在不指定端口号的情况下访问API,如下所示: curl http://my-servicev2.service.consul/health -> {“build”:“OK”}`

Consul有可能吗?

我尝试注册没有Port值的服务,并添加了0作为端口值。

1 个答案:

答案 0 :(得分:1)

否则在这种情况下,consul纯粹作为DNS服务器并返回健康实例的ip地址。正如您在dig和ping命令中看到的那样。

您必须像使用curl调用一样指定端口。

要破解此操作,您可以修改您的应用程序以在http默认端口80上运行。

如果无法做到这一点,您可以设置所谓的反向代理。

Nginx非常适合这一点。以下是一个允许您处理此配置的配置片段:

location / {
    proxy_pass http://127.0.0.1:3033;
}

这会将您所有的端口80调用传递给localhost端口3033.然后您的curl调用将按预期工作,而不指定端口。