ZeroMQ架构,用于类似缓存的服务

问题描述

我提供了一项服务,该服务在NetMQ的0MQ路由器套接字上接受请求,并且几乎像其他应用程序的缓存一样工作,即它可以接收“ GET”请求并发送响应,或者可以接收“ PUT”不需要响应的请求。

但是我有两个问题:

  1. 我尝试在客户端代码中使用RequestSocket,但是如果我在发送消息后不等待响应,它仍然会失败(我想这就是REQ / REP在0MQ中的工作方式)。如果我只想获得 some 消息类型的响应,什么是合适的0MQ套接字类型?

  2. 当前,我的客户代码在需要与服务进行通信时会创建一个新的RequestSocket实例。在NetMQ中是否有一种线程安全的方法,当我需要发送请求并获得响应时,可以有一个套接字可以在客户端代码上重用,而无需每次都创建新的连接?

目前服务代码基本上是:

var socket = new RouterSocket(endpoint);
socket.ReceiveReady += (sender,e) =>
{
    var msg = e.Socket.ReceiveMultipartMessage();
    var action = msg[3].ConvertToString();
    switch (action)
    {
        case "GET":
        {
            var key = msg[4].ConvertToString();
            var data = _cache.Get(key);
            var response = new NetMQMessage();
            response.Append(msg[0]); // msg id
            response.Append(NetMQFrame.Empty);
            response.Append(msg[4]);
            response.Append(data);
            e.Socket.SendMultipartMessage(response);
        }
        break;

        case "SET":
        {
            var key = msg[4].ConvertToString();
            var data = msg[5].Buffer;
            _cache.Set(key,data);

            // no response needed here,but needed for RequestSocket clients                
        }
        break;

        default: throw new NotImplementedException();
    }
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...