我意识到这是一个极为广泛的问题,但我确实需要一些指导。 我在服务器上使用端口50080和50090运行了两个服务。之所以这样做,是因为在Java中创建服务时,在同一端口上运行它们会产生冲突。
在服务器上设置了DNS,以返回在50080上运行的服务。基本上,当您键入域名(prod.example.com)时,默认情况下将获得该服务的get all方法。但是,我们想在50090上设置DNS来说明该服务。我想这可以在运行prod.example.com:50080转到第一个服务,而prod.example.com:50090进行第二个服务时起作用服务。
到目前为止,我还没有找到太多有关如何实现此目标的文档。这样做似乎是可行的,但是我在这样做方面空白。
答案 0 :(得分:0)
如果您不在网络世界中,那么您将拥有完美的解决方案,它被称为SRV
记录。它们基本上是MX
记录对电子邮件所做的概括。
但是首先要注意的是,如果您在网络世界中,那么不幸的是,没有浏览器在使用这些记录,因此也可能没有HTTP(S)客户端库。在那种情况下,您确实需要对URL中的端口号进行硬编码,否则客户端将默认为80或443。或者在HTTP级别使用某种代理/重定向机制。
因此,如果您不在网络范式中,请参阅RFC 2782了解SRV记录,或查看Wikipedia article了解有关SRV记录的详细信息。
简而言之,它们提供了一种将服务标识(它是服务名称和传输)与其位置(基本上是主机名和端口)分离的方法,并带有其他一些属性,例如能够进行负载平衡/故障转移。
让我们说您有两个服务在同一端口上的不同端口上运行。但是您不希望对其中的任何内容进行硬编码,尤其是在客户端,因为任何服务都可以随时移至其他设备或端口。
所以您要这样做:
foo
和bar
。50080
上,另一个在端口50090
然后可以在DNS中发布:
_foo._tcp.example.com. IN SRV 10 10 50080 somehost.example.com.
_bar._tcp.example.com. IN SRV 10 10 50090 somehost.example.com.
然后,您只需要确保这2个服务的客户端正在使用那里的SRV记录,即可找到用于连接以访问每个服务的正确主机名和端口号。 所有这些对于服务器都是不可见的,这只是放置在客户端中的一些逻辑。