rabbitMq 常见问题

1.Server channel error: 406, message: PRECONDITION_FAILED - inequivalent arg 'durable' for exchange 'delay-lxw' in vhost '/': received 'false' but current is 'true'

这是由于服务端和客户端设置的交换机类型不一致所致

rabbitmq 的exchange有以下几种类型:

  • fanout类型 (广播)

  • direct类型 (严格指定)

  • topic类型 (宽松指定)

  • headers类型

2.rabbitmq系列问题解决:406, "PRECONDITION_FAILED - inequivalent arg 'durable'

 错误信息翻译过来大致意思就是:当前的queue的durable属性是true,但是我们声明queue时过去的参数确实是false.

 这个错误造成的原因是现在页面创建了queue和exchanges,但是代码中声明要使用的queue时,durable属性传递的是false.

要注意的是,生产者和消费者对queue的声明函数里,这个durable必须保持一致。

$exchange->setFlags(AMQP_DURABLE); //添加这行

参考文章:https://www.cnblogs.com/zhaohuaxishi/p/12107392.html

完整实例(生产者)

//推送消息到Mq
	public function pushTaskMq()
	{
		//$exchangeName = 'AMQP default'; //交换机名
		//$routeKey = 'delay-lxw-333'; //路由key
		$exchangeName = 'task-ems'; //交换机名
		$routeKey = 'delay-lxw'; //路由key
		$message = 'Hello World 123!'; //消息内容

		// 建立TCP连接,配置信息
		$connection = new AMQPConnection([
			'host' => 'localhost',
			'port' => '5672',
			'vhost' => '/',
			'login' => 'guest',
			'password' => 'guest',
			'heartbeat' => 30,
		]);

		//var_dump($connection->connect());
		//创建链接
		$connection->connect() or die("Cannot connect to the broker!\n");

		try {
			$channel = new AMQPChannel($connection);
			//创建交换机对象
			$exchange = new AMQPExchange($channel);
			$exchange->setName($exchangeName);
			$exchange->setType(AMQP_EX_TYPE_TOPIC);
			$exchange->setFlags(AMQP_DURABLE); //添加这行
			//AMQP_EX_TYPE_FANOUT  //广播
			//AMQP_EX_TYPE_DIRECT //严格指定
			//AMQP_EX_TYPE_TOPIC 宽松指定)
			//AMQP_EX_TYPE_HEADERS  //headers类型
			$exchange->declareExchange();

			//发送消息
			echo 'Send Message: ' . $exchange->publish($message, $routeKey) . "\n";
			echo "Message Is Sent: " . $message . "\n";
		} catch (\AMQPConnectionException $e) {
			var_dump($e);
		}

		$connection->disconnect();// 断开连接
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ 是一个开源的消息队列中间件,常用于在分布式系统中进行消息传递。以下是一些 RabbitMQ 常见问题: 1. 什么是 RabbitMQRabbitMQ 是一个消息队列中间件,它实现了 AMQP(Advanced Message Queuing Protocol)协议,并提供了可靠的消息传递机制。 2. RabbitMQ 的主要特点是什么? RabbitMQ 的主要特点包括高度可靠性、灵活的路由机制、扩展性强、支持多种消息协议和模式、多种编程语言支持等。 3. 如何安装和配置 RabbitMQ? 你可以从 RabbitMQ 官方网站下载适合你操作系统的安装包,并按照官方文档进行安装和配置。 4. RabbitMQ 的主要组件是什么? RabbitMQ 的主要组件包括生产者(Producer)、消费者(Consumer)、交换机(Exchange)和队列(Queue)。 5. 如何发送和接收消息? 生产者可以将消息发送到交换机,交换机根据指定的路由规则将消息路由到队列中,然后消费者可以从队列中接收消息进行处理。 6. RabbitMQ 支持哪些消息模式? RabbitMQ 支持多种消息模式,包括点对点模式、发布/订阅模式、主题模式等,可以根据需求选择合适的模式。 7. RabbitMQ 如何处理消息丢失和重复消费的问题? RabbitMQ 提供了消息持久化机制,可以确保消息在发送和接收过程中的可靠性。此外,使用消息确认机制和幂等性操作可以避免消息重复消费的问题。 8. 如何监控和管理 RabbitMQRabbitMQ 提供了可视化的管理界面,在浏览器中访问管理界面可以查看和管理队列、交换机、连接等信息。此外,还可以使用 RabbitMQ 提供的 API 进行监控和管理。 这些是 RabbitMQ 的一些常见问题和基本概念,如果你有具体的问题或需要更详细的介绍,欢迎继续提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lxw1844912514

你的打赏就是对我最大的鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值