C# rabitmq生产者和消费者代码 通配符模式。

生产者
///
/// 交换机exchange通配符模式topic
///
///
public void SendrabbitmqExchangeTopic(IConnectionFactory connFactory, string msg, string exchangeName)
{
try
{
using (IConnection conn = connFactory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
//路由名称
string routeKey = exchangeName;

                    channel.ExchangeDeclare(exchange: exchangeName, type: "topic", true);

                    //channel.ConfirmSelect();
                    //Console.WriteLine("消息内容:");
                    String message = msg;
                    //消息内容
                    byte[] body = Encoding.UTF8.GetBytes(message);
                    // 创建消息属性对象
                    var properties = channel.CreateBasicProperties();

                    // 设置自定义头部信息
                    properties.Headers = new Dictionary<string, object>
{
    { "destination", AppSettingsConstVars.SendHeaders },
};
                    //发送消息
                    channel.BasicPublish(exchange: exchangeName, routingKey: routeKey, basicProperties: properties, body: body);
                    //var isok = channel.WaitForConfirms();
                    Console.WriteLine("成功发送消息11:" + message + ";33");// + isok.ToString());
                }
            }
        }
        catch (Exception e)
        {

            throw;
        }
    }

消费者
///
/// 交换机exchange通配符模式topic
///
///
public async void ReceiverabbitmqExchangeTopic(IConnectionFactory connFactory, string exchangeName)
{
Console.WriteLine(“Start-exchange-topic”);
PoOrderResponseEventInfo? order = new PoOrderResponseEventInfo();
using (IConnection conn = connFactory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
//消息队列名称
string queueName = exchangeName + “510";// “GRAVITY_DC_ICS_DESIGN_PO_ORDER_FAST_CREATE_OUTPUT_510”;
//string queueName = exchangeName + "
” + new Random().Next(1, 1000).ToString();
//声明队列
channel.ExchangeDeclare(exchange: exchangeName, type: “topic”, true);
channel.QueueDeclare(
queue: queueName,// 消息队列名称
durable: true,//是否缓存
exclusive: false,
autoDelete: false,
arguments: null
);
// 创建消息属性对象
var headers = new Dictionary<string, object>();
headers.Add(“headers[‘destination’]”, AppSettingsConstVars.ReceiveHeaders);
//声明交换机
foreach (string routeKey in new string[] { “topic.*” })
{
//将队列与交换机进行绑定
//匹配多个路由
channel.QueueBind(queue: queueName, exchange: exchangeName, routingKey: “#”, arguments: headers);
}
//告诉Rabbit每次只能向消费者发送一条信息,再消费者未确认之前,不再向他发送信息
//声明为手动确认
channel.BasicQos(0, 5, false);
//创建消费者对象
var consumer = new EventingBasicConsumer(channel);
Console.WriteLine(“开始接收:” + queueName);
//接收消息
var sds = new BasicDeliverEventArgs();
PoOrderParamServices p = new PoOrderParamServices();
consumer.Received += (model, ea) =>
{
Thread.Sleep(1000);
byte[] message = ea.Body.ToArray();//接收的消息
var ss = Encoding.UTF8.GetString(message);
//吧读取出来的数据转为实体
order = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(message), typeof(PoOrderResponseEventInfo)) as PoOrderResponseEventInfo;
if (order != null)
{
var data = _PoOrderParamServices.PoOrderResponseEvent(order);
}
Console.WriteLine(“接收到的消息为:” + Encoding.UTF8.GetString(message));
//返回消息确认
channel.BasicAck(ea.DeliveryTag, true);
};
//消费者开启监听
//将autoAck设置false 关闭自动确认
channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);
Console.WriteLine(“消费者已启动,等待接收消息…”);
Console.ReadLine();

            }

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,它实现了高效的消息传递机制,可以在分布式系统中进行消息的发布和订阅。生产者消费者模式是一种常见的消息通信模式,其中生产者负责发送消息,消费者负责接收和处理消息。 在RabbitMQ中,生产者消费者之间通过交换机(Exchange)和队列(Queue)进行通信。生产者将消息发送到交换机,交换机根据指定的路由规则将消息路由到一个或多个队列中,消费者从队列中接收消息并进行处理。 在单机模式下,RabbitMQ生产者消费者都运行在同一台机器上。以下是单机模式RabbitMQ生产者消费者的基本步骤: 1. 安装RabbitMQ:首先需要在机器上安装RabbitMQ服务。 2. 创建连接:生产者消费者都需要创建与RabbitMQ服务器的连接。连接包括主机名、端口号、用户名和密码等信息。 3. 创建通道:连接成功后,生产者消费者都需要创建一个通道。通道是进行消息传递的通道,可以在同一个连接上创建多个通道。 4. 声明交换机:生产者需要声明一个交换机,用于将消息发送到指定的队列。交换机有不同的类型,如直连交换机、主题交换机、扇形交换机等。 5. 声明队列:消费者需要声明一个队列,用于接收生产者发送的消息。队列可以绑定到交换机上,以便接收特定类型的消息。 6. 发布消息:生产者通过通道将消息发送到交换机,指定消息的路由键和其他属性。 7. 消费消息:消费者通过通道从队列中接收消息,并进行处理。可以设置回调函数来处理接收到的消息。 8. 关闭连接:当生产者消费者完成任务后,需要关闭与RabbitMQ服务器的连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值