rabbitMQ clientApi netcore

一、RabbitMQ几个对象介绍
rabbitMQ clientApi netcore
通过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();
上一篇:VS2022安装报错"无法安装microsoft.netcore.hostpath"


下一篇:【.Netcore】试用国产框架《AdcFramework》