我可以使用ZeroMQ套接字更改使用REST的两个微服务之间的通信机制吗?

时间:2019-07-15 15:27:38

标签: rest microservices zeromq messaging

我们如何将基于HTTP API->的通信干净转换为使用ZMQ库的消息通信?

enter image description here

1 个答案:

答案 0 :(得分:1)

如果确实要这样做,可以使用ZeroMQ工具设计一种介体。

ZeroMQ具有一组多层次的抽象,其中AccessPoint通常具有在它们彼此之间执行的某些“行为”(分布式行为)。

您指定的目标旨在不使用这种行为,而是要对数据流进行某种透明的(几乎)有线级别的处理。

为此,我首先将您的注意力吸引到以下概念:
-ZeroMQ Hierarchy in Less than Five Seconds
并且在可能的工具旁边,该工具可以切实帮助完成给定任务:
- ZMQ_STREAM 可扩展的正式通信原型(用于AccessPoint)

  

使用 ZMQ_STREAM 传输时,类型tcp://的套接字用于从非ØMQ对等方发送和接收TCP数据。 ZMQ_STREAM套接字可以充当客户端和/或服务器,异步发送和/或接收TCP数据。

  当接收到TCP数据时,ZMQ_STREAM套接字在将消息传递给应用程序之前,应在消息部分之前包含消息的始发对等方的身份。所接收的消息在所有连接的同级之间公平排队。

  发送TCP数据时,ZMQ_STREAM套接字应删除消息的第一部分,并使用它来确定消息应路由到的对等方的身份,并且不可路由的消息将导致EHOSTUNREACH或{ {1}}错误。

  要打开与服务器的连接,请使用EAGAIN调用,然后使用zmq_connect调用获取套接字标识。

  要关闭特定连接,请发送标识帧,然后发送零长度消息(请参见示例部分)。

  建立连接后,应用程序将收到零长度的消息。同样,当对等方断开连接(或连接断开)时,应用程序将收到零长度的消息。

  您必须先发送一个标识帧,然后发送一个数据帧。 ZMQ_IDENTITY zmq_getsockopt标志对于身份帧是必需的,但在数据帧中将被忽略。

示例:

ZMQ_SNDMORE