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日
    浏览(32)
  • RabbitMq同一队列多个消费者问题

    RabbitMQ只有Queue,如果多个消费者绑定同一个queue,那么一条消息,只能被其中一个消费者取走(轮询)。 本质上,RabbitMq的消费者的消息确认机制,就注定不可能让多个消费者同时去消费同一个队列中的同一条消息,只能轮询的方式去消费。 我感觉我们的目的是想用rabbitmq

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

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

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

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

    2024年02月08日
    浏览(30)
  • 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日
    浏览(30)
  • RabbitMQ查询队列使用情况和消费者详情实现

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

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

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

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

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

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

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

    2024年02月07日
    浏览(32)
  • Java编写简易rabbitmq生产者与消费者

    开发时经常与其它系统用rabbitmq对接,当需要自测时,还是自己写rabbitmq生产者、消费者自测方便些。 下面总结下不用框架、使用java编写简易rabbitmq的方法。 (1)如果是maven,那就用 (2)如果没用maven,那就找一个 amqp-client-3.3.4.jar 文件,然后引入项目 说明: (1)其中的配置,按照

    2024年01月16日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包