RabbitMQ-fanout广播模式

本文介绍RabbitMQ的fanout广播模式,所有绑定到fanout交换机的队列都能接收到消息。通过示例代码展示了如何在发送端发布消息及消费端如何接收消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ-fanout广播模式


     fanout: 所有bind到该交换机的队列都可以接收消息。

     消息的接受者需要创建一个队列,绑定到该fanout交换机上,监听来自发送端的消息广播。fanout模式和topic模式基本是一样的,唯一的一个区别在于topic可以根据不同的主题路由到不同的队列,但是fanout模式是没有路由这个过程的,所有绑定到该交换机上的队列都会收到这一条广播消息。
在这里插入图片描述
     基于上文中封装的RabbitMq代码RabbitMQ C++封装,在此实现fanout广播消息的发送和消息。
     发送端代码:

std::string err;

	//mq连接
	CRabbitMqClient mqClient;
	if (0 != mqClient.Connect(err))
	{
		return -1;
	}

	//声明交换机
	CExchange exchange(exchange_name, "fanout", true, false);
	if (0 != mqClient.DeclareExchange(exchange, err))
	{
		return -1;
	}

	amqp_basic_properties_t properties;
	GetProperties(properties);
	for (int i = 0; i < 5; i++)
	{
		std::string szBuf = "test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1test-1";
		CMessage message(szBuf, properties, routing_keys_name);
		if (0 != mqClient.PublishMessage(message, err))
		{
			return -1;
		}
		//printf("发送消息成功:%s\n", szBuf);
	}

     消费端代码,需要找到对应的交换机,并创建属于自己的队列,绑定到该交换机上,进行广播消息的接收:

std::string err;

	//mq连接
	CRabbitMqClient mqClient;
	if (0 != mqClient.Connect(err))
	{
		return -1;
	}

	//声明交换机
	CExchange exchange(exchange_name, "fanout", true, false);
	if (0 != mqClient.DeclareExchange(exchange, err))
	{
		return -1;
	}

	//声明队列
	CQueue queue(queue_name);
	if (0 != mqClient.DeclareQueue(queue, err))
	{
		return -1;
	}

	//队列绑定到交换机上
	if (0 != mqClient.BindQueueToExchange(queue, exchange, routing_keys_name, err))
	{
		return -1;
	}

	do 
	{
		std::vector<std::string> messageVec;
		mqClient.ConsumerMessage(messageVec, queue_name);
		printf("接收消息成功:\n");
		for (int i = 0; i < messageVec.size(); i++)
		{
			printf("消息%d:%s\n", i, messageVec[i].c_str());
		}
	} while (1);

     消费端需要声明一个和生产端一模一样的交换机(包括交换机的名称,属性),然后再声明一个临时队列(各个消费者需要各自声明一个唯一队列,因为RabbitMq只会把消息发送到一个队列一次,比如:comsumer1和comsumer2声明了同一个队列,producer生产了3条消息,那么可能comsumer1收到了2条,comsumer2收到了1条;也有可能comsumer1收到了3条,comsumer2一条都没收到),绑定到该交互机上,在一个while循环中不停消费该队列上的消息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simple Simple

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值