ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rabbitMQ clientApi netcore

2021-11-15 17:02:42  阅读:155  来源: 互联网

标签:false netcore 队列 绑定 rabbitMQ 消息 ExchangeType clientApi channel


一、RabbitMQ几个对象介绍
在这里插入图片描述
通过web管理界面截图可以看到:Connections、Channels、Exchanges、Queues、Admin
1、Connections:连接RabbitMQ客户端
2、Channels :通道,相当一个数据库的DB实例
3、Exchanges:消息中枢,负责将发布的消息按照一定的规则放到对应队列中。
4、Queues:队列,消费者从中获取消息
5、Admin: 用户

二、对象详细介绍
1、Connections

            //创建连接工厂
            ConnectionFactory factory = new ConnectionFactory
            {
                UserName = "admin",//用户名
                Password = "admin",//密码
                VirtualHost = "my_vhost",
                HostName = "ip"//rabbitmq ip 
                //端口默认为5672,如果端口没做特殊处理,可以不填写
            };
            //创建连接
            var connection = factory.CreateConnection();

2、Channels

            //创建通道
            var channel = connection.CreateModel();

3、Exchanges

//创建交换机:消息中枢
channel.ExchangeDeclare("exchangeName", ExchangeType.Direct, false, false, null);

4、Queues

//声明一个队列
channel.QueueDeclare("hello", false, false, false, null);
//队列绑定一个消息中枢,以便消息中枢可以按照逻辑可以往队列中推送消息
channel.QueueBind("hello", "exchangeName", "routeKey", null);

注意:消息中枢Exchange 往Queues推送消息有四种模式
1、ExchangeType.Direct、Fanout 、Topic 、Headers:Exchange绑定Queues时设置的路由和发布
假设:
Exchange绑定Queues时路由名称为 “routeA”
发布消息时设置路由为 “routeB”

发布消息
channel.BasicPublish("exchangeName", "hello", null, sendBytes);

推送模式:
ExchangeType.Direct :routeA必须和routeB相等,exchange才能推送到队列里面(记得队列和exchange要绑定哦
**ExchangeType.Fanout:**忽略路由设置,只要有绑定关系,都推送
ExchangeType.Topic : 可以设置模糊匹配,“#”匹配一个或多个词,“*”匹配不多不少一个词
ExchangeType.Headers:发布消息时通过var properties = channel.CreateBasicProperties();创建基本属性,设置properties 的header字典键值对;消费消息时再创建queue和exchange并且绑定exchange和queue,绑定时传入对于的字典键值对。

三、消费消息
消费时和exchange没有关系,只和队列有关系

            //创建连接工厂
            ConnectionFactory factory = new ConnectionFactory
            {
                UserName = "admin",//用户名
                Password = "admin",//密码
                VirtualHost = "my_vhost",
                HostName = "47.100.65.100"//rabbitmq ip
            };
            //创建连接
            var connection = factory.CreateConnection();
            //创建通道
            var channel = connection.CreateModel();
            //事件基本消费者
            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
            //定义接收到消息事件 须要调用  channel.BasicConsume 才会执行此事件
            consumer.Received += (ch, ea) =>
            {
                var message = Encoding.UTF8.GetString(ea.Body.ToArray());
                Console.WriteLine($"收到消息: {message}");
                //确认该消息已被消费
                channel.BasicAck(ea.DeliveryTag, false);
            };
            string input;
            do
            {
                Console.WriteLine("按回车开始消费");
                input = Console.ReadLine();
                //启动消费者 设置为手动应答消息
                channel.BasicConsume("hello", false, consumer);
            } while (input.Trim().ToLower() != "exit");
            Console.WriteLine("消费者已启动");
            Console.ReadKey();
            channel.Dispose();
            connection.Close();

标签:false,netcore,队列,绑定,rabbitMQ,消息,ExchangeType,clientApi,channel
来源: https://blog.csdn.net/u012558074/article/details/121337066

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有