Microservices 向领事馆注册的微服务的随机端口

Microservices 向领事馆注册的微服务的随机端口,microservices,consul,Microservices,Consul,注意:我不是问领事HTTP端口8500。我可以调用microservice公开的API吗?它是使用concur发现的,只由.service.concur/调用,而不指定端口号 我正在使用Concur发现微服务的多个版本。此微服务(用Java编写)具有以下功能: 服务在concur中注册为-my-Service.Service.concur(服务端口为3030)。我在领事馆注册了同一微服务的另一个版本:my-servicev2.service.consul(端口3033) 服务定义(为示例而更改)

注意:我不是问领事HTTP端口8500。我可以调用microservice公开的API吗?它是使用concur发现的,只由.service.concur/调用,而不指定端口号

我正在使用Concur发现微服务的多个版本。此微服务(用Java编写)具有以下功能:

服务在concur中注册为-my-Service.Service.concur(服务端口为3030)。我在领事馆注册了同一微服务的另一个版本:my-servicev2.service.consul(端口3033)

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

但是,我应该能够访问API,而无需指定如下端口号:
curlhttp://my-servicev2.service.consul/health ->
{“构建”:“确定”}`

这在领事馆可能吗


我尝试在没有
端口
值的情况下注册该服务,它将
0
添加为端口值。

否在本例中,consur仅充当DNS服务器并返回健康实例的ip地址。正如您在dig和ping命令中看到的那样

您必须像在curl调用中那样指定端口

要解决这个问题,您可以修改应用程序以在http默认端口80上运行

如果这是不可能的,您可以设置所谓的反向代理

Nginx在这方面非常有效。以下是允许您处理此问题的配置片段:

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

这将把所有端口80调用传递到本地主机端口3033。这样,您的curl调用就可以在不指定端口的情况下正常工作。

谢谢Thun的回答。修改应用程序端口不是我的选择。我必须能够在任何可用的随机端口上注册微服务。我怀疑Nginx是否能做到这一点。从你的回答中我看到的是,我必须事先知道港口号码。这限制了动态服务注册和发现。我接受这个答案。更多细节:如果有人能帮忙,我将不胜感激。
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"}`
location / {
    proxy_pass http://127.0.0.1:3033;
}