我开始学习docker (以及一般的微服务),我已经开始在windows上构建一个愚蠢的"hello world“类型的应用程序(一个作为.Net核心控制台应用程序,另一个作为ASP.NET核心web应用程序)。
我的下一个里程碑是让两个容器相互通信,只是来回发送某种简单的消息。
容器之间的通信通常使用哪些技术?
我最初的想法是为容器的传出和传入消息设置一个队列,这样它就不需要关心发现和直接与另一个容器交谈。
这是一种常见的策略,还是有更好的docker-y方法呢?
如果队列是一个很好的选择,那么人们通常使用docker是什么(请记住,它需要在windows容器中运行,并且理想情况下需要与C#客户端一起工作)?
我在docker hub上看过一张rabbitmq for windows的图片,我也听说过一些好东西--虽然从来没有用过(我从来没有把它直接安装到我的windows机器上,但通过docker,我在几分钟内就得到了一个可用的版本--不得不说,到目前为止,我用docker真的很开心)。我乐于接受大家的建议。
我见过一些人建议为他们的容器使用restful apis,但这似乎要复杂得多,因为您需要知道要与之通信的特定容器,并且接收容器需要以某种方式确认您有权与其通信(我猜您可能会有一个特殊的授权容器来创建令牌)。
发布于 2017-08-27 02:36:54
通常使用哪些技术来实现容器之间的通信?
Docker具有创建虚拟网络的能力。您可以将多个容器添加到同一网络中,每个容器可以使用其他容器的名称直接与其他容器通信。容器名称将充当DNS名称,并将为同一网络中的容器自动解析。
关于队列的
:
队列或者更一般的消息传递技术非常适合微服务。消息传递允许异步通信,这对可伸缩性非常有利。消息传递不太适合请求/响应类型的通信,在这种通信中,发送方希望从接收方获得直接响应。顾名思义,它们更适合用来发送消息。(想一想发送电子邮件,你不会阻止等待回复)
另一方面,Rest属于同步通信类别。它们是公开用于请求/响应通信的API的最流行的方式。
一般来说,REST比消息传递技术更容易实现。消息传递通信需要位于通信端点之间的消息传递代理(例如Rabbitmq)。
总之,如果您的通信是异步的,请使用rabbitmq。否则,如果您有请求/响应通信策略,请在您的应用程序中公开rest apis。
最后,无论您选择什么,docker网络都将允许您将所有内容粘合在一起。如果使用rabbitmq,则将其添加到网络中,并向rabbitmq (容器名称)主机发送消息。
发布于 2017-08-27 01:02:53
容器只不过是在隔离环境中运行的标准守护进程/服务。关于容器之间的通信,没有什么特别的规则。
通常,您只需要将容器连接到相同的network,它们将充当连接到相同局域网的虚拟服务器,并通过标准网络连接查看彼此。
使用队列来共享数据不是一个“容器”的事情,而是一个微服务的良好实践。
总而言之,您必须区分容器之间的低级网络连接和服务之间的高级逻辑数据交换。
https://stackoverflow.com/questions/45897004
复制相似问题