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

我可以使用ZeroMQ套接字更改使用REST的两个微服务之间的通信机制吗?,rest,microservices,zeromq,messaging,Rest,Microservices,Zeromq,Messaging,我们如何将基于HTTP API-->的通信干净地转换为使用ZMQ库的消息通信 如果您确实想这样做,可以使用ZeroMQ工具设计一种中介 ZeroMQ有一组多级抽象,其中访问点通常具有它们自己执行的特定“行为”(分布式行为) 您指定的目标旨在不使用此类行为,而是对数据流进行某种透明的(几乎)线级处理 为此,请允许我首先让您关注以下概念: - 在一个可能的工具旁边,可以帮助完成给定任务: -ZMQ\u流可扩展的正式通信原型(用于接入点) 当使用TCP://传输时,类型为ZMQØu STREAM的套接

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


如果您确实想这样做,可以使用ZeroMQ工具设计一种中介

ZeroMQ有一组多级抽象,其中访问点通常具有它们自己执行的特定“行为”(分布式行为)

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

为此,请允许我首先让您关注以下概念:
-
在一个可能的工具旁边,可以帮助完成给定任务:
-
ZMQ\u流
可扩展的正式通信原型(用于接入点)

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

当接收TCP数据时,
ZMQ_流
socket应在将消息传递给应用程序之前,将包含原始对等方身份的消息部分前置到消息。接收到的消息在所有连接的对等方之间公平排队。

发送TCP数据时,
ZMQ\u流
套接字应删除消息的第一部分,并使用它确定消息应路由到的对等方的身份,不可中断的消息应导致
EHOSTUNREACH
EAGAIN
错误。

要打开与服务器的连接,请使用
zmq\u connect
调用,然后使用
zmq\u identity zmq\u getsockopt
调用获取套接字标识。

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

当建立连接时,应用程序将收到一条长度为零的消息。类似地,当对等方断开连接(或连接丢失)时,应用程序将收到一条长度为零的消息。

您必须发送一个标识帧,后跟一个数据帧。身份帧需要
ZMQ\u SNDMORE
标志,但在数据帧上被忽略

示例:

                                             /* Create Context-Engine */
void *ctx = zmq_ctx_new ();                     assert (ctx);

                                             /* Create ZMQ_STREAM socket */
void *socket = zmq_socket (ctx, ZMQ_STREAM);    assert (socket);

int rc = zmq_bind (socket, "tcp://*:8080");     assert (rc == 0);

                                             /* Data structure to hold the ZMQ_STREAM ID */
uint8_t id [256];
size_t id_size = 256;

                                             /* Data structure to hold the ZMQ_STREAM received data */
uint8_t raw [256];
size_t raw_size = 256;

while (1) {
                                             /* Get HTTP request; ID frame and then request */
 id_size = zmq_recv (socket, id, 256, 0);       assert (id_size > 0);

 do {
 raw_size = zmq_recv (socket, raw, 256, 0);     assert (raw_size >= 0);
 } while (raw_size == 256);

                                             /* Prepares the response */
 char http_response [] =
                          "HTTP/1.0 200 OK\r\n"
                          "Content-Type: text/plain\r\n"
                          "\r\n"
                          "Hello, World!";

                                             /* Sends the ID frame followed by the response */
 zmq_send (socket, id, id_size, ZMQ_SNDMORE);
 zmq_send (socket, http_response, strlen (http_response), 0);

                                            /* Closes the connection by sending the ID frame followed by a zero response */
 zmq_send (socket, id, id_size, ZMQ_SNDMORE);
 zmq_send (socket, 0, 0, 0);
}
zmq_close (socket); zmq_ctx_destroy (ctx);  /* Clean Close Sockets / Terminate Context */