如何解决我们可以在gRPC中将Inproc传输与发布/订阅消息传递模式一起使用吗?
基本上,我正在探索将gRPC用于事件驱动的机制,以便在应用程序的同一进程(但线程不同)内在发布者和多个订阅者之间交换信息。该应用程序是C ++应用程序。
不幸的是,我看到的有关gRPC pubsub的所有示例都使用了我不需要的Google云,因为我的要求是在过程中且已本地化。 我对ZeroMQ(ZeroMQ,can we use inproc: transport along with pub/sub messaging pattern)看到了类似的问题,并且看到可以在ZeroMQ中做到这一点。
问题:
在不使用Google Cloud的情况下,使用gRPC进行进程内发布/订阅是否可行?
是否有示例?
还是应该根据需要切换到ZeroMQ?
解决方法
Q :“还是我应该根据需要切换到ZeroMQ?”
与前两个相反,最后一个问题对我来说是可以决定的。试试吧:
尽管仅给出了 inproc://
,但您可以选择使用更轻量级的nanomsg或成熟的,更多的互操作协议zeromq, / strong>提到了运输类,后者似乎为该任务装备过多。
如果仅需要这种传输类,则可以使用明确的请求将数据泵实例化为纯I / O线程少的Context()
实例:
#define Zero_IO_threads 0
void *myCtx = zmq_ctx_new ( Zero_IO_threads );
assert ( myCtx && "FAILED: zmq_ctx_new ( ... )" );
zmq_ctx_set ( myCtx,ZMQ_BLOCKY,false );
void *aPubSocket = zmq_socket ( myCtx,ZMQ_PUB );
assert ( aPubSocket && "FAILED: zmq_socket ( ... )" );
...
void *aSubSocket = zmq_socket ( myCtx,ZMQ_SUB );
assert ( aSubSocket && "FAILED: zmq_socket ( ... )" );
rc = zmq_setsockopt ( aSubSocket,ZMQ_SUBSCRIBE,"",0 );
assert ( rc == 0 && "FAILED: zmq_setsockopt ( aSubSocket,... )" );
...
rc = zmq_bind ( aPubSocket,"inproc://#A" ); // Def inproc name "#A"
assert ( rc == 0 && "FAILED: zmq_bind ( aPubSocket,... )" );
...
rc = zmq_connect ( aSubSocket,"inproc://#A"); // Try connect to #A
assert ( rc == 0 && "FAILED: zmq_connect ( aSubSocket,... )" );
// ___________________________________________aSubSocket can start receive messages
...
// ___________________________________________FINALLY: gracefully close & terminate
assert ( 0 == zmq_close ( aPubSocket ) && "FAILED: zmq_close( aPubSocket )" );
...
assert ( 0 == zmq_close ( aSubSocket ) && "FAILED: zmq_close( aSubSocket )" );
...
assert ( 0 == zmq_ctx_term ( myCtx ) && "FAILED: zmq_ctx_term( myCtx )" );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。