问题标签 [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.

0 投票
1 回答
1349 浏览

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',但为 ''

有人可以帮忙吗?

0 投票
1 回答
237 浏览

rabbitmq - 我如何知道所有订阅者何时完成?

我们有一堆我们计划发布到队列的请求。

将有几种不同的订阅者类型,每一种都在他们自己的循环池中。

例如 Request1 被推入队列

LoggingSubscriber1 和 LoggingSubscriber2 都使用“LoggingSubscriber”subscriptionId 进行订阅,因此只有其中一个会收到请求。

还会有其他组,例如 DoProcessSubscriber1、DoProcessSubscriber2 和 DoProcessSubscriber3

还有另一个 DoOtherProcessSubscriber1、DoOtherProcessSubscriber2

我们需要某种方式来知道所有三个订阅者(Logging、DoProcess 和 DoOtherProcess)都已完成,以便我们可以执行一些操作……比如向客户端发送一条消息,表明所有整个请求都已完成。

我们将如何汇总这样的响应?我们正在考虑让每个订阅者在队列中放置一个响应对象,但我们仍然不确定如何知道它们都已完成。

0 投票
1 回答
1648 浏览

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 类中有一个默认构造函数,但我仍然不确定为什么会这样。

我试过只通过一个对象类型(而不是命令),它工作正常。

有人可以解释我在这里做错了什么吗?

0 投票
1 回答
102 浏览

easynetq - 删除 FuturePublished 消息

如果我使用FuturePublish()调度消息以供将来执行,EasyNetQ API 中是否有任何内容允许我在调度程序的 SQL 数据库中脱水时删除消息?

0 投票
1 回答
7688 浏览

c# - 我可以使用 RabbitMQ 将大文件分发到多台机器吗?

我在一家数字标牌公司工作,我们向网络上的各种机器发送大量动画/视频。我们过去使用 ftp 将文件从服务器应用程序(这是我们的内容管理系统)发送到播放内容的机器。

是否可以在我们发送大文件的环境中使用 RabbitMQ(某些视频可能是千兆字节或更大)?大多数文件都很小,但偶尔我们会发送大视频。

此外,稍后将添加一些播放器机器,这意味着排队必须是动态的(即添加了播放器,所以现在我们可以向它发送内容)。RabbitMQ可以这样配置吗?(从我看到的演示中,您必须在服务器和客户端应用程序启动之前预先创建队列)。

我们还可以保护文件的发送,以便发送应用程序在将内容发送到机器之前必须登录(例如登录 FTP)?

0 投票
1 回答
897 浏览

.net - EasyNetQ - EasyNetQ.Topology.Queue

有人可以解释一下isExclusiveEasyNetQ.Topology.Queue 类型的构造函数参数的使用。

注意:此类型需要实例化才能使用高级 API 删除队列。

0 投票
1 回答
4480 浏览

c# - 易网Q。高级 API - 发布不会在 RabbitServer 上产生响应

将 EasyNetQ 视为我们当前用于 MQ 通信的库的替代品。

对于测试,我尝试使用自定义命名策略简单地将许多消息发布到交换。我的发布方法在下面的小测试方法中>

问题是,即使你创建了 Exchange 和 Queue,并且绑定得当,发布也不会产生任何东西。没有消息进入队列。Rabbit MQ 管理界面中的图表甚至没有显示交易所的任何活动。我在这里错过了什么吗?代码基本上直接取自文档。

如果我使用简单的总线并且只是发布,则会创建一个交换,我可以通过管理界面看到消息正在发布。由于简单总线使用高级 API 发布,我认为这是我缺少的设置问题。

我希望有人能带来一些见解:-)

/托马斯

0 投票
1 回答
1148 浏览

c# - 带有 Windows 服务异常的 EasyNetQ

我一直在使用 EasyNetQ 运行一个简单的 Windows 服务,但是当我尝试发布一条消息时,我收到了一个异常。

例外:

Pubisher confirms timed out after 10 seconds waiting for ACK or NACK from sequence

这是我的发布测试:

这是我的订阅测试:

这是订阅的调用:

0 投票
2 回答
1465 浏览

c# - MVC - WCF - RabbitMQ - 通过消息队列到消费者加速或替代方案的域事件?

领域驱动设计传递事件以分离限界上下文


MVC 中的用户操作应生成一个事件,该事件将传递给远程(同一 LAN)事件处理程序。

我测试过的:

  1. MVC:触发并忘记服务调用(异步)->
  2. (IIS 托管)收集数据并填充消息的 WCF ->
  3. 通过 EasyNetQ/RabbitMQ ServiceBus 发送 ->
  4. 该事件由处理事件及其数据的订阅者(使用从 WCF 服务端点初始化的 DI 容器)使用。

如果通过在 MVC 端循环来相当快地调用服务,我做了一些测试以了解它是如何工作的

MessageQueue 部分很快,基于它被发送到队列并在同一秒内被订阅者接收的时间戳。循环通过 WCF 服务调用非常慢。循环通过它们需要几秒钟。我尝试从 wsHttpBinding 切换到 netTcpBinding,并在 WCF 中使用 serviceThrottling。

WCF 不是强制性的,但似乎一个单独的事件处理项目(在发布者端)将是有益的,并且可以物理地位于 MVC 应用程序的其他位置(减少负载等)。WCF 是否适用于这种情况,或者我应该尝试使用 Windows 服务或其他一些自托管的控制台应用程序等,或者可能使用 MVC 中的线程来生成事件数据,还是有更好的场景?这种事件处理系统的最佳实践是什么?基本上,让某些东西生成事件数据似乎是有益的,因为它必须在某处进行处理,同时又不会减慢最终用户正在使用的 UI。

0 投票
2 回答
10368 浏览

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