Rabbitmq 消费者 : Exception (504) Reason: “channel/connection is not open“

这篇具有很好参考价值的文章主要介绍了Rabbitmq 消费者 : Exception (504) Reason: “channel/connection is not open“。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Rabbitmq 消费者 : Exception (504) Reason: “channel/connection is not open”

启动微服务 Rabbitmq 时,定位 ch.consume() 出现异常

一、问题分析

分析日志:no exchange ‘log_topic’

> docker logs rabbitMQ_1
2023-02-10 04:17:17.221260+00:00 [error] <0.834.0> Channel error on connection <
0.819.0> (172.19.0.1:51534 -> 172.19.0.4:5672, vhost: '/', user: 'guest'), chann
el 2:
2023-02-10 04:17:17.221260+00:00 [error] <0.834.0> operation queue.bind caused a
 channel exception not_found: no exchange 'log_topic' in vhost '/'

二、检查代码

  1. consumer.go 中,ch.QueueBind 绑定在 “log_topic”
func (consumer *Consumer) Listen(topics []string) error {
	ch, err := consumer.conn.Channel()
	if err != nil {
		log.Println("channel: ", err)
		return err
	}
	defer ch.Close()

	q, err := declareRandomQueue(ch)
	if err != nil {
		log.Println("declareRandomQueue: ", err)
		return err
	}

	for _, tpoic := range topics {
		ch.QueueBind(
			q.Name,
			tpoic,
			"log_topic",
			false,
			nil,
		)

		if err != nil {
			return err
		}
	}

	msg, err := ch.Consume(q.Name, "", true, false, false, false, nil)
	if err != nil {
		log.Println("message: ", err)
		return err
	}

	forever := make(chan bool)
	go func() {
		for d := range msg {
			var payload Payload
			_ = json.Unmarshal(d.Body, &payload)

			go handlePayload(payload)
		}
	}()
	fmt.Printf("Waiting for message on [Exchange, Queue] [log_topic, %s\n]", q.Name)
	<-forever

	return nil
}
  1. event.go 中,ch.ExchangeDeclare 配置的是 “logs_topic”
func declareExchange(ch *amqp.Channel) error {
	return ch.ExchangeDeclare(
		"logs_topic", //name
		"topic",     //type
		true,        //durable
		false,       //auto delete
		false,       //internal
		false,       //no wait
		nil,         //arguements
	)
}

三、优化代码

定义一个常量 channelName,代码中使用这个常量文章来源地址https://www.toymoban.com/news/detail-533868.html

const channelName string = "log_topic"

到了这里,关于Rabbitmq 消费者 : Exception (504) Reason: “channel/connection is not open“的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ消费者的可靠性

    目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID  3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制( Consumer Acknowledgement )。即:当消费者处理消息结束后,应该向RabbitMQ发送一个回执,告知RabbitMQ自己消息

    2024年02月07日
    浏览(39)
  • rabbitmq消费者与生产者

    在第一次学习rabbitmq的时候,遇到了许多不懂得 第一步导包 第二步新增生产者 在这里中: connectionFactory.setVirtualHost(\\\"my_vhost\\\");//填写自己的队列名称,如果你的为”/“则填写\\\'\\\'/\\\'\\\' 第三步新增消费者 消息获取成功 注意如果你用的云服务器需要打开这两个端口 5672 15672 如果你使

    2024年02月11日
    浏览(43)
  • 如何在rabbitmq中实现一个生产者,多个消费者,多个消费者都能收到同一条消息

    场景:用户登录,邀请其它用户进行视频会议,收到邀请的用户进入会议 rabbitmq实现思路: 选型:发布订阅模式(Publish/Subscribe) 一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,

    2023年04月25日
    浏览(49)
  • RabbitMQ原理(五):消费者的可靠性

    当RabbitMQ向消费者投递消息以后,需要知道消费者的处理状态如何。因为消息投递给消费者并不代表就一定被正确消费了,可能出现的故障有很多,比如: 消息投递的过程中出现了网络故障 消费者接收到消息后突然宕机 消费者接收到消息后,因处理不当导致异常 … 一旦发生

    2024年02月08日
    浏览(39)
  • rabbitmq 消费者报错 ListenerExecutionFailedException NullPointerException

    报错信息: org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener method \\\'private void com.xxx.service.impl.xxxServiceImpl.xxx(com.xxx.dto.XXX)\\\' threw exception     at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:230)     at org.sprin

    2024年02月07日
    浏览(38)
  • RabbitMQ查询队列使用情况和消费者详情实现

    spring-boot-starter-amqp 是Spring Boot框架中与AMQP(高级消息队列协议)相关的自动配置启动器。它提供了使用AMQP进行消息传递和异步通信的功能。 以下是 spring-boot-starter-amqp 的主要特性和功能: 自动配置: spring-boot-starter-amqp 通过自动配置功能简化了与AMQP相关的组件的集成。它根

    2024年02月12日
    浏览(35)
  • (18)不重启服务动态停止、启动RabbitMQ消费者

            我们在消费RabbitMQ消息的过程中,有时候可能会想先暂停消费一段时间,然后过段时间再启动消费者,这个需求怎么实现呢?我们可以借助RabbitListenerEndpointRegistry这个类来实现,它的全类名是org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry,通过这个类可以

    2024年02月09日
    浏览(35)
  • rabbitmq之Consumer Prefetch(消费者预取)

    官方文档: https://www.rabbitmq.com/consumer-prefetch.html https://www.rabbitmq.com/confirms.html#channel-qos-prefetch 测试”消息积压“场景:在消费者没有启动的情况下,生产者先生产很多消息。然后先开启一个a消费者,再开启b消费者,发现只有a消费者不断的消费旧的消息,而b消费者”无动于

    2024年02月11日
    浏览(34)
  • 【RabbitMQ实战】 03 SpringBoot RabbitMQ生产者和消费者示例

    上一节我们写了一段原生API来进行生产和消费的例子。实际上SpringBoot对原生RabbitMQ客户端做了二次封装,让我们使用API的代价更低。 依赖引入 RabbitMQ的配置如下 每个配置的具体含义,详见配置 代码说明 使用RabbitTemplate可以发送消息 这个Controller定义了一个发送的接口,调用

    2024年02月07日
    浏览(39)
  • RabbitMQ系列(5)--使用Java实现RabbitMQ的消费者接收消息

    前言:先简单了解RabbitMQ的工作过程,方便后续开发理清思路 简略: 详细: 1、新建消费者类 效果图: 2、编写消费者消费消息的代码 例: 3、查看代码运行结果 运行代码后如果有输出生产者发送的”Hello World”信息,则证明消费者消费消息成功 4、在web页面上查看队列的消

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包