RabbitMQ频道创建准则
|
我正在编写一个简单的类,我的应用程序将使用该类使用RabbitMQ发送和接收消息。
我已经找到了尽可能多的关于RabbitMQ的方法,博客文章,白皮书和类似文章。
大多数示例都显示使用包装在using块中的连接和通道,并且与之相反,您可能应该将它们实现为单例。
特别是关于通道,我已经看到有评论说,同时使用单个通道的线程不应超过一个。
我正在用C#编写我的库。这是一个单例,在第一次实例化时连接了静态连接。
我曾考虑过对频道进行相同的操作,但是我打算使用相同的库来允许发布/订阅多个交换/队列。发布和订阅都可以从多个线程完成。
最后是我的问题:
我应该如何实施渠道创建?
每条消息?
每个消费者都有一个独特的私人渠道,发布者将访问权同步到一个独特的渠道吗?
你抓住我的漂移。
请记住,我打算使用一台服务器,其中包含数十个使用者/发布者,但不多。
谢谢!
没有找到相关结果
已邀请:
5 个回复
翁茄口霉氖
)。 如果很少有并发的RabbitMQ操作或消息大小总是很小,那么您可能只需在所有RabbitMQ发布/订阅操作周围放一个“ 1”就可以摆脱困境。如果您需要使用交错线程以交错方式传输多个请求-首先是通道的用途-使用任意线程,则可能需要创建一个通道池,例如
,在其中排队未使用的频道,并在需要的时间出队。通道创建的开销很低,从性能测试来看,我觉得通道创建过程不涉及任何网络io,即,似乎在客户端首次使用RabbitMQ服务器时会自动创建通道。 OLD(2016年1月26日之前):Java和.net实现的现在大部分已过时的详细信息: Re:通道和多个线程,由于它依赖于实现,因此有点混乱。 Java实现:通道是线程安全的: 通道实例可安全用于多个线程。 但: 在多个线程之间共享通道时,确认操作不正确 .net实现:通道不是线程安全的: 如果一个以上的线程需要访问特定的IModel实例,则应用程序应自己强制执行互斥。 IModel操作序列化不正确的症状包括但不限于: •电线上发送的帧序列无效 •抛出NotSupportedExceptions ... 因此,除了.bin有用的答案(无论它是否线程安全)都适用外,在.net实现中,您不能只共享一个通道。
吐兄
炬卤遁蝎变
募磷
慰泥悍瓶
然后为ObjectPool配置依赖项注入
然后可以注入in5ѭ并使用它
资料来源: https://www.c-sharpcorner.com/article/publishing-rabbitmq-message-in-asp-net-core/ https://developpaper.com/detailed-explanation-of-object-pools-various-usages-in-net-core/