问题标签 [easynetq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - EasyNetQ 未从使用 RabbitMQ Java 客户端 API 发布的队列中读取消息
我们正在使用 Coldfusion,利用 java RabbitMQ 客户端 API 将消息发布到队列,然后使用 EasyNetQ 使用 C# 从队列中读取消息。
消息是一个字符串。
java 客户端将消息发布为内容类型为 text/plain 的未序列化字节数组。
当我们尝试从队列中读取消息时,我们总是会抛出 EasyNetQ.EasyNetQInvalidMessageTypeException,无论 EasyNetQ 端定义的消息类型如何。我已经尝试将它作为字节数组并且只是一个基本对象。我认为 EasyNetQ 每次都期待一个序列化的对象?
我们得到的例外是
消息:2344462 基本属性:(content-type=text/plain,content-encoding= ,headers=,delivery-mode=1,priority=0,correlation-id= ,reply-to=,expiration= ,message-id= , timestamp= , typ e= , user-id= , app-id= , cluster-id=_)
异常:EasyNetQ.EasyNetQInvalidMessageTypeException:消息类型不正确。预期为 'System_Byte[]:mscorlib',但为 ''
有人可以帮忙吗?
rabbitmq - 我如何知道所有订阅者何时完成?
我们有一堆我们计划发布到队列的请求。
将有几种不同的订阅者类型,每一种都在他们自己的循环池中。
例如 Request1 被推入队列
LoggingSubscriber1 和 LoggingSubscriber2 都使用“LoggingSubscriber”subscriptionId 进行订阅,因此只有其中一个会收到请求。
还会有其他组,例如 DoProcessSubscriber1、DoProcessSubscriber2 和 DoProcessSubscriber3
还有另一个 DoOtherProcessSubscriber1、DoOtherProcessSubscriber2
我们需要某种方式来知道所有三个订阅者(Logging、DoProcess 和 DoOtherProcess)都已完成,以便我们可以执行一些操作……比如向客户端发送一条消息,表明所有整个请求都已完成。
我们将如何汇总这样的响应?我们正在考虑让每个订阅者在队列中放置一个响应对象,但我们仍然不确定如何知道它们都已完成。
c# - EastNetQ Json 序列化异常
我对消息传递相当陌生,我决定使用 EasyNetQ (RabbitMQ .Net) 构建一个原型。
我已经创建了发布者和订阅者,一切似乎都运行良好。我的 Web 服务应用程序中有 Publisher 捕获所有发送到数据库的命令。我让控制台应用程序中的订阅者接收消息。
但是,当订阅者获取 Command 对象时,它会抛出错误:
一个类应该有一个默认构造函数、一个带参数的构造函数或一个标有 JsonConstructor 属性的构造函数。
在我的原型中,我有一个像这样的 Command 类:
我将此命令对象传递给发布者:
订阅者拿起消息:
当我运行它并且订阅者处理命令对象时,我收到错误:
错误:订阅回调引发的异常。
Exchange: 'Entities_Command:BL'
Routing Key: ''
Redelivered: 'False'
Message: {"Type":"BL.DataAccess.XXX, BL, Version=1.2.0.0, Culture=neutral, PublicKeyToken=xxx","Method ":"GET","Params":[1,true,3]}
基本属性:
ContentType=NULL, ContentEncoding=NULL, Headers=[], DeliveryMode=2, Priority=0, CorrelationId=8aa21f39-4020-4904-b90d-4cb123d3cac0, ReplyTo=NULL, Expiration=NULL, MessageId=NULL, Timestamp=0,Type =Entities_Command:BL,UserId=NULL,AppId=NULL,ClusterId=NULL 异常:Newtonsoft.Json.JsonSerializationException:找不到用于类型 Entities.Command 的构造函数。一个类应该有一个默认构造函数、一个带参数的构造函数或一个标有 JsonConstructor 属性的构造函数。路径“类型”,第 1 行,位置 8。Newtonsoft.Json.SerializerInternalReader.CreateNewObject(JsonReader 阅读器,JsonObjectContract objectContract,JsonProperty containerMember,JsonProperty containerProperty,String id,Boolean& createdFromNonDefaultConstructor)在 Newtonsoft.Json.Serialization。DisplayClass5`1.b _4(Byte[] body, MessageProperties properties, MessageReceivedInfo messageRecievedInfo) 在 EasyNetQ.Consumer.HandlerRunner.InvokeUserMessageHandler(ConsumerExecution Context context)
我在 Command 类中有一个默认构造函数,但我仍然不确定为什么会这样。
我试过只通过一个对象类型(而不是命令),它工作正常。
有人可以解释我在这里做错了什么吗?
easynetq - 删除 FuturePublished 消息
如果我使用FuturePublish()
调度消息以供将来执行,EasyNetQ API 中是否有任何内容允许我在调度程序的 SQL 数据库中脱水时删除消息?
c# - 我可以使用 RabbitMQ 将大文件分发到多台机器吗?
我在一家数字标牌公司工作,我们向网络上的各种机器发送大量动画/视频。我们过去使用 ftp 将文件从服务器应用程序(这是我们的内容管理系统)发送到播放内容的机器。
是否可以在我们发送大文件的环境中使用 RabbitMQ(某些视频可能是千兆字节或更大)?大多数文件都很小,但偶尔我们会发送大视频。
此外,稍后将添加一些播放器机器,这意味着排队必须是动态的(即添加了播放器,所以现在我们可以向它发送内容)。RabbitMQ可以这样配置吗?(从我看到的演示中,您必须在服务器和客户端应用程序启动之前预先创建队列)。
我们还可以保护文件的发送,以便发送应用程序在将内容发送到机器之前必须登录(例如登录 FTP)?
.net - EasyNetQ - EasyNetQ.Topology.Queue
有人可以解释一下isExclusive
EasyNetQ.Topology.Queue 类型的构造函数参数的使用。
注意:此类型需要实例化才能使用高级 API 删除队列。
c# - 易网Q。高级 API - 发布不会在 RabbitServer 上产生响应
将 EasyNetQ 视为我们当前用于 MQ 通信的库的替代品。
对于测试,我尝试使用自定义命名策略简单地将许多消息发布到交换。我的发布方法在下面的小测试方法中>
问题是,即使你创建了 Exchange 和 Queue,并且绑定得当,发布也不会产生任何东西。没有消息进入队列。Rabbit MQ 管理界面中的图表甚至没有显示交易所的任何活动。我在这里错过了什么吗?代码基本上直接取自文档。
如果我使用简单的总线并且只是发布,则会创建一个交换,我可以通过管理界面看到消息正在发布。由于简单总线使用高级 API 发布,我认为这是我缺少的设置问题。
我希望有人能带来一些见解:-)
/托马斯
c# - 带有 Windows 服务异常的 EasyNetQ
我一直在使用 EasyNetQ 运行一个简单的 Windows 服务,但是当我尝试发布一条消息时,我收到了一个异常。
例外:
Pubisher confirms timed out after 10 seconds waiting for ACK or NACK from sequence
这是我的发布测试:
这是我的订阅测试:
这是订阅的调用:
c# - MVC - WCF - RabbitMQ - 通过消息队列到消费者加速或替代方案的域事件?
领域驱动设计传递事件以分离限界上下文
MVC 中的用户操作应生成一个事件,该事件将传递给远程(同一 LAN)事件处理程序。
我测试过的:
- MVC:触发并忘记服务调用(异步)->
- (IIS 托管)收集数据并填充消息的 WCF ->
- 通过 EasyNetQ/RabbitMQ ServiceBus 发送 ->
- 该事件由处理事件及其数据的订阅者(使用从 WCF 服务端点初始化的 DI 容器)使用。
如果通过在 MVC 端循环来相当快地调用服务,我做了一些测试以了解它是如何工作的
MessageQueue 部分很快,基于它被发送到队列并在同一秒内被订阅者接收的时间戳。循环通过 WCF 服务调用非常慢。循环通过它们需要几秒钟。我尝试从 wsHttpBinding 切换到 netTcpBinding,并在 WCF 中使用 serviceThrottling。
WCF 不是强制性的,但似乎一个单独的事件处理项目(在发布者端)将是有益的,并且可以物理地位于 MVC 应用程序的其他位置(减少负载等)。WCF 是否适用于这种情况,或者我应该尝试使用 Windows 服务或其他一些自托管的控制台应用程序等,或者可能使用 MVC 中的线程来生成事件数据,还是有更好的场景?这种事件处理系统的最佳实践是什么?基本上,让某些东西生成事件数据似乎是有益的,因为它必须在某处进行处理,同时又不会减慢最终用户正在使用的 UI。
rabbitmq - EasyNetQ 无法发布到 RabbitMQ - PersistentChannel 超时
我正在尝试使用 EasyNetQ 连接到 RabbitMQ。RabbitMQ 在远程虚拟机上。
我得到一个 TimeoutException The operation requested on PersistentChannel timed out.
。远程 VM 正在回复 ping,端口 5672 和 15672 已打开(使用 nmap 检查)。可以从我的主机访问 RabbitMQ 管理。
此外,如果 RabbitMQ 在我的本地机器上运行,它工作正常。我尝试从局域网中的其他电脑连接到安装在我电脑上的 RabbitMQ,它也可以工作。
我得出一个假设,它与它在虚拟机上的事实有关,并且可能存在连接问题。但同样,Rabbit 的网络管理工作正常。
还在 EasyNetQ 测试应用程序上进行了测试 - 适用于本地主机,但不适用于远程。
输出如下:
- EasyNetQ v0.28.4.242