问题标签 [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 投票
2 回答
5379 浏览

ldap - RabbitMQ LDAP 身份验证失败

我正在经历使用 LDAP 授权设置 RabbitMQ 的过程,但运气不佳......知道的人可以看看并告诉我我做错了什么吗?我可以使用以下代码查询 LDAP 以获取用户对象:

配置尝试 1

配置尝试 2

配置尝试 3

连接代码

我正在尝试以多种方式进行连接(均失败):

内部数据库回退配置正在运行,因此guest能够毫无问题地连接。

日志

对于“LDAP 绑定错误”、“handshake_error,starting,0”和“access_refused”,我有一个很好的 Google,但找不到任何可以为我指明正确方向的东西。

任何帮助,将不胜感激。

0 投票
1 回答
2458 浏览

c# - 使用 EasyNetQ for RabbitMQ 时自定义错误队列名称?

而不是让我未处理的异常进入EasyNetQ_Default_Error_Queue我想知道是否有一种方法可以明确说明应该用于给定应用程序的错误队列的名称,所以错误不会全部出现在这个EasyNetQ_Default_Error_Queue 中

我可以看到如何指定常规消息队列名称,但没有找到有关错误队列名称的任何信息。

0 投票
1 回答
1153 浏览

c# - 使用 EasyNetQ.Hosepipe 时有没有办法指定不同的错误队列?

我最近发布了以下问题...

使用 EasyNetQ for RabbitMQ 时自定义错误队列名称?

... 并提供了一个解决方案,说明如何在使用 EasyNetQ 时使用不同的、特定于应用程序的错误队列名称,而不是让所有未处理的异常进入默认错误队列 (EasyNetQ_Default_Error_Queue)。

我现在想要的是能够使用 EasyNetQ.Hosepipe.exe 来转储我指定的任何错误队列中的所有错误消息,作为执行以下操作时的默认行为,根据文档...

... 是将 EasyNetQ_Default_Error_Queue 中的任何消息转储到一个文件夹中,在我的情况下,这个默认错误队列现在将始终为空。

以前,在使用默认错误队列时,我可以使用上面的软管错误方法,然后使用软管重试...

...它会将所有转储的错误消息放回各自的队列中以进行重新处理。

0 投票
1 回答
3049 浏览

c# - 当使用 EasyNetQ 发布消息并且总线断开时会发生什么情况?

我目前正在调查这个,但我想我还是会问。一旦我发现如果没有回答,将发布答案。

问题如下:

应用程序调用 RabbitHutch.CreateBus 来创建 IBus/IAdvancedBus 的实例以将消息发布到 RabbitMQ。返回实例,但 IsConnected 标志设置为 false(即在后台完成连接重试)。当应用程序处理特定请求时,将调用 IAdvancedBus.PublishAsync 以在总线仍未连接时发布消息。在大量负载下,对应用程序的请求最终会超时,因为总线永远无法连接到 RabbitMQ。

当处理请求时与 RabbitMQ 的连接丢失时,会观察到相同的行为。

问题是:

EasyNetQ 如何在总线断开时处理发布消息的尝试?

在建立连接之前,消息是否在内存中排队?如果是这样,它是否会在达到某个限制后处理消息?这是可配置的吗?

还是强制总线尝试连接到 RabbitMQ?

还是完全转储消息?

PublisherConfirms 是否打开影响行为?

0 投票
1 回答
2000 浏览

c# - 如何通过 EasynetQ 中的队列名称使用 AutoSubscribe 机制?

这是我的出版商。有两个消费者。邮件消费者和短信消费者。

我可以使用以下代码订阅:

如何通过 AutoSubscriber 实现它?AutoSubscriber 中没有 Queue Name 选项,有“Subscription Id”

0 投票
1 回答
1786 浏览

c# - 更改 JSON.NET 序列化设置

我正在尝试使用 EasyNetQ 发送复杂对象,但我一直遇到此异常,因为我的对象包含引用回父对象的子对象列表:

我曾尝试像这样更改 JSON.NET 默认设置,但它不能解决问题:

如何更改 Json 序列化程序的默认设置,以便无需创建单独的 DTO 对象即可解决此问题?

编辑:我已经尝试了可能重复的建议(正如我在原始帖子中所说的那样),但并没有解决问题。

0 投票
1 回答
72 浏览

c# - 使用 DI/StructureMap 切换数据库

我有一个应用程序侦听队列上的消息并处理所述消息。

到目前为止,我已经为我们的每个客户安装了一个单独的应用程序实例,每个客户在配置文件中都有自己的数据库连接字符串。在更新应用程序时,这变得很痛苦。

现在我正在尝试重构它,以便能够安装一个具有所有必要连接字符串的实例,并将根据一些运行时参数在数据库之间切换 - 例如 message.Client。

如果我用手把所有东西都连接起来,这一切都很好......

...但是我很难弄清楚我是如何开始使用 DI 容器来实现这一目标的。

根据我的阅读,我可以看到构造函数参数可以与 StructureMap 一起使用。例如:

...但无法弄清楚应该何时/如何设置 someValueAtRunTime ,无论我尝试什么,我都会质疑它的线程安全性。

任何帮助表示赞赏。

0 投票
0 回答
491 浏览

c# - 使用 EasyNetQ 检测消费失败

当我从一个已经被另一个独占消费者锁定的队列开始消费时,虽然我可以看到正在记录的错误,但消费方法不会引发异常。一直尝试每 10 秒开始消耗一次,这ExclusiveConsumer很好,但我想(从代码)检查它何时还没有开始。

消费失败。queue='Queue1', consumer tag='cb439965-72d4-4d52-a248-91077b796703', message='AMQP操作被中断:AMQP close-reason,由Peer发起,code=403, text="ACCESS_REFUSED - queue' 1' in vhost '/' 独占使用", classId=60, methodId=20, cause='

有什么方法可以在Consumer不修改代码的情况下检测状态?

0 投票
1 回答
2469 浏览

rabbitmq - easynetQ 延迟响应/请求导致超时

我在我们的服务器(Windows Server 2008)上使用 EasyNetQ 的请求/响应模式时遇到了问题。目前无法在本地复制它。

设置是我们有 2 个 Windows 服务(作为控制台应用程序运行以进行测试),它们通过 EasyNetQ 中的请求/响应模式连接。直到最近,这一直在服务器上按预期工作,其中请求方在请求超时之前不会“消耗”响应。

我已经包含了 2 个指向 pastebin 的链接,其中包含 EasyNetQ 的控制台日志记录,希望能让我的问题更加清晰。

请求端

响应端

除此之外,我的请求代码如下所示:

在响应方面:

正如我所说,请求方按预期发送请求,响应方消费/捕获它。这可以正常工作,但是当响应端完成处理并响应时(确实如此,消息可以在 RabbitMQ 管理中看到),直到请求超时后,请求才会消耗/捕获响应(默认超时为 10 秒,尝试设置为 60 秒,没有区别)。这在上面链接的日志中也很明显,正如您将在 RequestSide 上看到的那样,从先前超时的响应队列中收到了大约 5 条消息。

我已经尝试使用 RespondAsync 以防处理时间过长并且搞砸了一些事情,但没有帮助。尝试同时使用 RespondAsync 和 RequestAsync,只是把一切都搞砸了(我可能对请求做错了:))。

我可能会遗漏一些东西,但我不确定从这里尝试什么。

编辑:注意到我搞砸了。以及在下面添加更多上下文:

用于请求/响应的 IBus 是使用 Ninject 创建和注入的:

这一切都通过使用 Topshelf 和 Ninject 构建的服务联系在一起,如下所示:

Topshelf 设置都经过了相当彻底的测试,它按预期工作,并且不应该与请求/响应问题真正相关,但我想我会提供更多的上下文。

0 投票
2 回答
509 浏览

c# - EasyNetQ.ManagementClient 用于获取每个队列的消息率

我正在使用 EasyNetQ.ManagementClient nuget 包来获取有关兔子的一些统计信息。在 Web 管理中,您可以看到每个队列的味精率在此处输入图像描述

但是在使用 EasyNetQ.ManagementClient 时,我无法仅针对代码中的队列获得相同的费率,是否有可能获得它们?

提前致谢