在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
上篇已经安装完Erlang,继续安装RabbitMQ 它支持开放的高级消息队列协议 (AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要MassTransit或NServiceBus的配合。它还具有“企业级”的适应性和稳定性。这些东西对我的客户来说十分的有吸引力。 RabbitMQ的整体架构 2. 为什么要用RabbitMQ消息队列 3. 如何安装RabbitMQ 4:上述的操作可以通过以下命令完成 rabbitmqctl list_users 配置权限 rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" 查看用户权限 rabbitmqctl list_user_permissions admin 设置tag rabbitmqctl set_user_tags admin administrator 删除用户(安全起见,删除默认用户) rabbitmqctl delete_user guest 5. RabbitMQ的队列形式 第一种:简单队列(一对一模式)耦合性高,生产消费一一对应。 using RabbitMQ.Client; using System; using System.Text; namespace RabbitMQTest { /// <summary> /// 生产者 /// </summary> class Program { static void Main(string[] args) { //创建连接工厂 ConnectionFactory factory = new ConnectionFactory { UserName = "admin",//用户名 Password = "lmt456123",//密码 HostName = "localhost"//rabbitmq ip }; //创建连接 var connection = factory.CreateConnection(); //创建通道 var channel = connection.CreateModel(); //声明一个队列 channel.QueueDeclare("hello", false, false, false, null); Console.WriteLine("\nRabbitMQ连接成功,请输入消息,输入exit退出!"); string input; do { input = Console.ReadLine(); var sendBytes = Encoding.UTF8.GetBytes(input); //发布消息 channel.BasicPublish("", "hello", null, sendBytes); } while (input.Trim().ToLower() != "exit"); channel.Close(); connection.Close(); } } }
创建一对一消费者 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; namespace RabbitMQConsumer { /// <summary> /// 消费者 /// </summary> class Program { static void Main(string[] args) { //创建连接工厂 ConnectionFactory factory = new ConnectionFactory { UserName = "admin",//用户名 Password = "lmt456123",//密码 HostName = "localhost"//rabbitmq ip }; //创建连接 var connection = factory.CreateConnection(); //创建通道 var channel = connection.CreateModel(); //事件基本消费者 EventingBasicConsumer consumer = new EventingBasicConsumer(channel); //接收到消息事件 consumer.Received += (ch, ea) => { string message = Encoding.Default.GetString(ea.Body.ToArray()); Console.WriteLine($"收到消息: {message}"); // Console.WriteLine($"收到该消息[{ea.DeliveryTag}] 延迟10s发送回执"); // Thread.Sleep(10000); //确认该消息已被消费 channel.BasicAck(ea.DeliveryTag, false); // Console.WriteLine($"已发送回执[{ea.DeliveryTag}]"); }; //启动消费者 设置为手动应答消息 channel.BasicConsume("hello", false, consumer); Console.WriteLine("消费者已启动"); Console.ReadKey(); channel.Dispose(); connection.Close(); } } } 一对一的消费队列咱们就此创建完成,下一节开始RabbitMQ的高级用法 |
请发表评论