golang整合rabbitmq-实现创建生产者绑定交换机-创建消费者消费完整代码

这篇具有很好参考价值的文章主要介绍了golang整合rabbitmq-实现创建生产者绑定交换机-创建消费者消费完整代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1,在生产者端初始化mq连接
golang整合rabbitmq-实现创建生产者绑定交换机-创建消费者消费完整代码,golang,rabbitmq,开发语言

package rabbitmq

import (
	"fmt"
	"log"

	"github.com/streadway/amqp"
)

var (
	conn *amqp.Config
)

func InitRabbitMq() {
	// 连接RabbitMQ服务器
	conn, err := amqp.Dial("amqp://guest:guest@你的mq服务器地址:5672/")
	if err != nil {
		log.Fatalf("Failed to connect to RabbitMQ: %v", err)
	}
	defer conn.Close()

	// 创建一个通道
	ch, err := conn.Channel()
	if err != nil {
		log.Fatalf("Failed to open a channel: %v", err)
	}
	defer ch.Close()

	// 声明一个交换机
	err = ch.ExchangeDeclare(
		"my_exchange", // 交换机名称
		"direct",      // 交换机类型
		true,          // 是否持久化
		false,         // 是否自动删除
		false,         // 是否内部使用
		false,         // 是否等待确认
		nil,           // 其他属性
	)
	if err != nil {
		log.Fatalf("Failed to declare an exchange: %v", err)
	}

	// 声明一个队列
	q, err := ch.QueueDeclare(
		"my_queue", // 队列名称
		true,       // 是否持久化
		false,      // 是否自动删除
		false,      // 是否排他
		false,      // 是否等待确认
		nil,        // 其他属性
	)
	if err != nil {
		log.Fatalf("Failed to declare a queue: %v", err)
	}

	// 绑定队列到交换机
	err = ch.QueueBind(
		q.Name,           // 队列名称
		"my_routing_key", // 路由键
		"my_exchange",    // 交换机名称
		false,            // 是否等待确认
		nil,              // 其他属性
	)
	if err != nil {
		log.Fatalf("Failed to bind a queue: %v", err)
	}

	fmt.Println("Exchange and queue created and bound successfully!")
}

2,创建生产者

package api

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/streadway/amqp"
	"log"
)

func RabbitMqPublish(c *gin.Context) {
	name := c.Param("name")
	fmt.Println(">>>>>>>", name)
	// 建立与RabbitMQ服务器的连接
	conn, err := amqp.Dial("amqp://guest:guest@你的mq服务器地址:5672/")
	if err != nil {
		log.Fatalf("Failed to connect to RabbitMQ: %v", err)
	}
	defer conn.Close()

	// 创建一个通道
	ch, err := conn.Channel()
	if err != nil {
		log.Fatalf("Failed to open a channel: %v", err)
	}
	defer ch.Close()

	// 声明一个队列
	queue, err := ch.QueueDeclare(
		"my_queue", // 队列名称
		true,       // 是否持久化
		false,      // 是否自动删除
		false,      // 是否具有排他性
		false,      // 是否阻塞
		nil,        // 额外参数
	)
	if err != nil {
		log.Fatalf("Failed to declare a queue: %v", err)
		fmt.Println(queue.Name)
	}

	//绑定队列
	//_ = ch.QueueBind("my_queue", "my_routing_key", "my_exchange", false, nil)

	// 发布消息到队列
	//message := "Hello, RabbitMQ!"
	if len(name) < 1 {
		name = "空消息"
	}
	err = ch.Publish(
		"my_exchange",    // 交换机名称
		"my_routing_key", // 路由key
		false,            // 是否强制
		false,            // 是否立即
		amqp.Publishing{
			ContentType: "text/plain",
			Body:        []byte(name),
		},
	)
	if err != nil {
		log.Fatalf("Failed to publish a message: %v", err)
	}

	log.Println("消息发送成功!!!!!!!!!!")
}

3,另起一个go服务进行消费者消费
golang整合rabbitmq-实现创建生产者绑定交换机-创建消费者消费完整代码,golang,rabbitmq,开发语言

package mq

import (
	"fmt"
	"github.com/streadway/amqp"
	"log"
)

func MqSubContext() {
	// 连接RabbitMQ服务器
	conn, err := amqp.Dial("amqp://guest:guest@你的mq服务器地址:5672/")
	if err != nil {
		log.Fatalf("Failed to connect to RabbitMQ: %v", err)
	}
	defer conn.Close()

	// 创建一个通道
	ch, err := conn.Channel()
	if err != nil {
		log.Fatalf("Failed to open a channel: %v", err)
	}
	defer ch.Close()

	// 声明一个队列
	queue, err := ch.QueueDeclare(
		"my_queue", // 队列名称
		true,       // 是否持久化
		false,      // 是否自动删除
		false,      // 是否具有排他性
		false,      // 是否阻塞
		nil,        // 额外参数
	)
	if err != nil {
		log.Fatalf("Failed to declare a queue: %v", err)
	}

	// 绑定队列到交换机
	err = ch.QueueBind(
		queue.Name,       // 队列名称
		"my_routing_key", // routing key
		"my_exchange",    // 交换机名称
		false,            // 是否阻塞
		nil,              // 额外参数
	)
	if err != nil {
		log.Fatalf("Failed to bind a queue: %v", err)
	}

	// 消费消息
	msgs, err := ch.Consume(
		queue.Name, // 队列名称
		"",         // 消费者标识符
		true,       // 是否自动应答
		false,      // 是否具有排他性
		false,      // 是否阻塞
		false,      // 是否等待
		nil,        // 额外参数
	)
	if err != nil {
		log.Fatalf("Failed to consume messages: %v", err)
	}

	// 处理接收到的消息
	for msg := range msgs {

		fmt.Printf("消费的消息是: %s\n", msg.Body)
	}
}

后面将会发布golang整合es操作的文章文章来源地址https://www.toymoban.com/news/detail-823533.html

到了这里,关于golang整合rabbitmq-实现创建生产者绑定交换机-创建消费者消费完整代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 优雅封装RabbitMQ实现动态队列、动态生产者,动态消费者绑定

    前言 SpringBoot 集成 RabbitMQ 公司老大觉得使用注解太繁琐了,而且不能动态生成队列所以让我研究是否可以动态绑定,所以就有了这个事情。打工人就是命苦没办法,硬着头皮直接就上了,接下来进入主题吧。 需求思路分析 根据老大的需求,大致分为使用配置文件进行配置,

    2024年02月16日
    浏览(42)
  • SpringBoot集成RabbitMQ(生产者)

    默认读者已经对SpringBoot和RabbitMQ比较熟悉 SpringBoot集成RabbitMQ(生产者)的步骤如下: 创建SpringBoot工程 Maven添加 spring-boot-starter-amqp 编写application.properties配置RabbitMQ的信息 编写交换机、队列、绑定配置类 在业务逻辑代码中注入RabbitTemplate 调用RabbitTemplate的方法,完成消息推送

    2024年02月15日
    浏览(43)
  • RabbitMQ-生产者可靠性

            由于网络波动导致客户端无法连接上MQ,这是可以开启MQ的失败后重连机制。         注意:                 是连接失败的重试,而不是消息发送失败后的重试。         这种超时重连的方式是 阻塞式 的,后面的代码没办法执行,如果说业务要求比较严格,则需

    2024年01月21日
    浏览(43)
  • RabbitMQ----生产者可靠性

    生产者可靠性主要分为两个方面: 生产者重连 生产者确认         有的时候由于网络波动,可能会出现客户端连接MO失败的情况。通过配置我们可以开启连接失败后的重连机制: 注意:         当网络不稳定的时候,利用重试机制可以有效提高消息发送的成功率。不

    2024年01月21日
    浏览(50)
  • RabbitMq生产者发送消息确认

    一般情况下RabbitMq的生产者能够正常的把消息投递到交换机Exchange,Exchange能够根据路由键routingKey把消息投递到队列Queue,但是一旦出现消息无法投递到交换机Exchange,或无法路由到Queue的这种特殊情况下,则需要对生产者的消息进行缓存或者保存到数据库,后续在调查完RabbitM

    2024年02月04日
    浏览(40)
  • RabbitMQ之生产者可靠性

    有的时候由于网络波动,可能会出现客户端连接RabbitMQ失败的情况。通过配置我们可以开启 连接失败后 的重连机制 注:当网络不稳定的时候,利用重试机制可以有效提高消息发送的成功率。不过SpringAMQP提供的重试机制是阻塞式的重试,也就是说多次重试等待的过程中,当前

    2024年01月22日
    浏览(47)
  • RabbitMQ生产者的可靠性

    目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失: 生产者发送消息时连接MQ失败 生产者发送消息到达MQ后未找到 Exchange 生产者发送消息到达

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

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

    2024年02月11日
    浏览(46)
  • RabbitMQ 生产者-消息丢失 之 场景分析

      生产者发送消息的流程如下:首先生产者和RabbitMQ服务器建立连接,然后创建信道,通过信道发送消息给RabbitMQ服务器,RabbitMQ服务器接收到消息后交由交换机进行消息存储,交换机根据不同策略将消息路由到指定队列中。在此过程中,可能会存在以下消息丢失的场景:

    2024年02月14日
    浏览(43)
  • 【RabbitMQ】RabbitMQ 消息的可靠性 —— 生产者和消费者消息的确认,消息的持久化以及消费失败的重试机制_rabbitmq 生产者消息确认

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月26日
    浏览(89)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包