Tag: rabbitmq

在exception时重新排队消息

我正在寻找一种可靠的方法来重新排队无法正确处理的消息 – 目前。 我一直在关注http://dotnetcodr.com/2014/06/16/rabbitmq-in-net-c-basic-error-handling-in-receiver/ ,似乎支持在RabbitMQ中重新排队消息API。 else //reject the message but push back to queue for later re-try { Console.WriteLine(“Rejecting message and putting it back to the queue: {0}”, message); model.BasicReject(deliveryArguments.DeliveryTag, true); } 但是我正在使用EasyNetQ。 所以想知道我将如何做类似的事情。 bus.Subscribe(“my_subscription_id”, msg => { try { // do work… could be long running } catch () { // something went wrong […]

在ASP.NET Core应用程序中设置RabbitMQ使用者

我有一个ASP.NET Core应用程序,我想使用RabbitMQ消息。 我已成功在命令行应用程序中设置发布者和使用者,但我不确定如何在Web应用程序中正确设置它。 我想在Startup.cs中初始化它,但当然一旦启动完成它就会死掉。 如何从Web应用程序以正确的方式初始化消费者?

从静态工厂类访问ASP.NET Core DI容器

我创建了一个ASP.NET核心MVC / WebApi站点,该站点有一个RabbitMQ订阅者,基于James Still的博客文章Real-World PubSub Messaging with RabbitMQ 。 在他的文章中,他使用静态类来启动队列订阅者并为排队事件定义事件处理程序。 然后,此静态方法通过静态工厂类实例化事件处理程序类。 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; namespace NST.Web.MessageProcessing { public static class MessageListener { private static IConnection _connection; private static IModel _channel; public static void Start(string hostName, string userName, string password, int port) { var factory = new ConnectionFactory { HostName = […]

使用用户名和密码时RabbitMQ C#连接出现问题

我在这里不知所措,所以我正在接受集体知识,希望有一个奇迹。 我使用默认值在Linux机器上安装了RabbitMQ。 当我使用这个代码(和默认的RabbitMQ安assembly置)时,一切都很好。 var connectionFactory = new ConnectionFactory(); connectionFactory.HostName = “192.168.0.12”; IConnection connection = connectionFactory.CreateConnection(); 但是当我向RabbitMQ添加用户并尝试使用以下代码时(用户名和密码已被更改以保护无辜。:)) var connectionFactory = new ConnectionFactory(); connectionFactory.HostName = “192.168.0.12”; connectionFactory.UserName = “user”; connectionFactory.Password = “password”; IConnection connection = connectionFactory.CreateConnection(); connectionFactory.CreateConnection()方法抛出以下exception: BrokerUnreachableException None of the specified endpoints were reachable 检查RabbitMQ日志文件我可以看到它抱怨凭据: {amqp_error,access_refused, “PLAIN login refused: user ‘user’ – invalid credentials”, ‘connection.start_ok’}} 问题是我对用户名和密码充满信心,我不能因为热爱编码而在任何地方找到解决方案。 […]

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

我没有将未处理的exception放入EasyNetQ_Default_Error_Queue,而是想知道是否有一种方法可以显式地说明应该用于给定应用程序的错误队列的名称,因此错误不会在这一个EasyNetQ_Default_Error_Queue中结束 ? 我可以看到如何指定常规消息队列名称,但没有找到任何有关错误队列名称的信息。

RabbitMQ 3.5和消息优先级

RabbitMQ 3.5现在支持消息优先级 ; 但是,我无法建立一个有效的例子。 我把我的代码放在下面。 它包括我期望的输出和实际的输出。 我会对更多文档和/或工作示例感兴趣。 所以我的问题很简单:如何在Rabbit 3.5.0.0中使用消息优先级? 出版商: using System; using RabbitMQ.Client; using System.Text; using System.Collections.Generic; class Publisher { public static void Main() { var factory = new ConnectionFactory() { HostName = “localhost” }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { IDictionary args = new Dictionary() ; args.Add(” […]

RabbitMQ C#API基于事件的消息消费

while (true) { BasicDeliverEventArgs e = (BasicDeliverEventArgs)Consumer.Queue.Dequeue(); IBasicProperties properties = e.BasicProperties; byte[] body = e.Body; Console.WriteLine(“Recieved Message : ” + Encoding.UTF8.GetString(body)); ch.BasicAck(e.DeliveryTag, false); } 这是我们通过订阅检索消息时所做的事情。我们使用While循环,因为我们希望消费者不断地听…如果我想让它甚至基于…那就是当时新消息到达队列的时候只有消费者应该消费消息..或任何类似的事件..

Rabbitmq Ack或Nack,将消息留在队列中

我一直在玩RabbitMq.net和消息致谢。 如果消费者能够处理消息,您可以以forms发送回ack channel.BasicAck(ea.DeliveryTag, false); 这将把它从队列中删除。 但是如果邮件无法处理呢? 也许是暂时中断,你不希望从队列中取出的消息只是放在后面并继续下一条消息? 我试过用 channel.BasicNack(ea.DeliveryTag, false, true); 但下一次它仍然得到相同的消息而不是移动到队列中的下一条消息 我的完整代码是 class Program { private static IModel channel; private static QueueingBasicConsumer consumer; private static IConnection Connection; static void Main(string[] args) { Connection = GetRabbitMqConnection(); channel = Connection.CreateModel(); channel.BasicQos(0, 1, false); consumer = new QueueingBasicConsumer(channel); channel.BasicConsume(“SMSQueue”, false, consumer); while (true) { if (!channel.IsOpen) { […]

RabbitMQ C#驱动程序停止接收消息

您是否有任何指示如何确定订阅问题何时发生,以便重新连接? 我的服务使用RabbitMQ.Client.MessagePatterns.Subscription进行订阅。 一段时间后,我的客户端默默地停止接收消息。 我怀疑网络问题,因为我的VPN连接不是最可靠的。 我已经通过文档阅读了一段时间,寻找一个关键,以找出这个订阅何时可能由于网络问题而没有太多运气而被打破。 我已经尝试检查连接和通道是否仍然打开,但似乎总是报告它仍处于打开状态。 它确实处理的消息工作得很好,并被确认回队列,因此我认为这不是“ack”的问题。 我确信我一定只是错过了一些简单的东西,但我还没有找到它。 public void Run(string brokerUri, Action handler) { log.Debug(“Connecting to broker: {0}”.Fill(brokerUri)); ConnectionFactory factory = new ConnectionFactory { Uri = brokerUri }; using (IConnection connection = factory.CreateConnection()) { using (IModel channel = connection.CreateModel()) { channel.QueueDeclare(queueName, true, false, false, null); using (Subscription subscription = new Subscription(channel, queueName, false)) { […]

从多个队列中读取,RabbitMQ

我是RabbitMQ的新手。 我希望能够在有多个队列(要读取)的情况下处理读取消息而不会阻塞。 有关如何做到这一点的任何意见? //编辑1 public class Rabbit : IMessageBus { private List publishQ = new List(); private List subscribeQ = new List(); ConnectionFactory factory = null; IConnection connection = null; IModel channel = null; Subscription sub = null; public void writeMessage( Measurement m1 ) { byte[] body = Measurement.AltSerialize( m1 ); int msgCount = 1; […]