RabbitMQ快速入门

Go 使用 RabbitMQ---------------之一 RabbitMQ 是一种消息代理。消息代理的主要目的是接收、存储并转发消息。在复杂的系统设计和微服务架构中,RabbitMQ 经常被用作中间件来处理和转发系统之间的消息,以确保数据的一致性和可靠性。正是因为提供了可靠的消息机制、跟踪机制和灵活的消息路由,常常被用于排队算法、秒杀活动、消息分发、异步处理、耗时任务等场景。 阅读详情

前言

1.我们使用docker安装RabbitMQ,如果没有docker可以先看下面的文章

服务器上安装Docker并进行基本配置_服务器装docker-优快云博客

2.示例使用的是golang语言

安装

服务器上执行以下命令安装RabbitMQ,直接使用docker社区镜像文件

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management

记得开启服务器防火墙的5672和15672两个端口

第一个端口号5672是我们生产者和消费者连接rabbitmq使用的端口

第二个端口号15672是控制台的端口号,通过浏览器访问 服务器ip:15672 来进入控制台页面

使用

在golang编辑器中使用以下指令导入amqp包

go get github.com/rabbitmq/amqp091-go

 创建两个go项目,一个作为生产者,一个作为消费者

生产者send.go文件代码如下:

package main

import (
	"context"
	amqp "github.com/rabbitmq/amqp091-go"
	"log"
	"time"
)

func main() {
	//发送消息
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	failOnError(err, "Failed to connect to RabbitMQ")
	defer conn.Close()
	ch, err := conn.Channel()
	failOnError(err, "Failed to open a channel")
	defer ch.Close()
	
	q, err := ch.QueueDeclare(
		"hello", // name
		false,   // durable
		false,   // delete when unused
		false,   // exclusive
		false,   // no-wait
		nil,     // arguments
	)
	failOnError(err, "Failed to declare a queue")
	
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	body := "Hello World!"
	err = ch.PublishWithContext(ctx,
		"",   // exchange
		q.Name, // routing key
		false,          // mandatory
		false,          // immediate
		amqp.Publishing{
			ContentType: "text/plain",
			Body:        []byte(body),
		})
	failOnError(err, "Failed to publish a message")
	log.Printf(" [x] Sent %s\n", body)
}
func failOnError(err error, msg string) {
	if err != nil {
		log.Panicf("%s: %s", msg, err)
	}
}

消费者service.go文件代码如下:

package main

import (
	"context"
	amqp "github.com/rabbitmq/amqp091-go"
	"log"
	"time"
)

func main() {
	//接收消息
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	failOnError(err, "Failed to connect to RabbitMQ")
	defer conn.Close()

	ch, err := conn.Channel()
	failOnError(err, "Failed to open a channel")
	defer ch.Close()

	q, err := ch.QueueDeclare(
		"hello", // Name
		false,   // durable
		false,   // delete when unused
		false,   // exclusive
		false,   // no-wait
		nil,     // arguments
	)
	failOnError(err, "Failed to declare a queue")

	msgs, err := ch.Consume(
		q.Name, // queue
		"",             // consumer
		true,           // auto-ack
		false,          // exclusive
		false,          // no-local
		false,          // no-wait
		nil,            // args
	)
	failOnError(err, "Failed to register a consumer")

	var forever chan struct{}

	go func() {
		for d := range msgs {
			log.Printf("Received a message: %s", d.Body)
		}
	}()

	log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
	<-forever
}
func failOnError(err error, msg string) {
	if err != nil {
		log.Panicf("%s: %s", msg, err)
	}
}

golang rabbitMQ 生产者复用channel以及生产者组分发策略 项目初始化构建时可以自定义选择生产者开启多个connection,每个connection可以启动多少个channel【都是全局复用的】,因为rabbitMQ所有的命令都是基本都是通过channel去操作完成的,所以这个channel很重要,也是我们想要复用的重点。在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的,所以就要去实现如何复用这些连接,并要做到高效并可靠。引用的是rabbitMQ官方示例的库。 阅读详情

相关推荐

RabbitMQ使用哪些端口?

端口4369: Erlang使用PORT Mapper Daemon (epmd)解析集群中的节点名称。节点必须能够相互访问,端口映射器守护进程才能运行群集。set _dist_listen_min/max防火墙设置的端口35197必须允许此范围内的通信在群集节点之间传递。设置在下面,我假设是需要的(35197)。默认值: 5672,手册中有答案。,所以它应该在默认的5672上侦听。使用或需要在防火墙上打开哪些端口?对于节点群集,RabbitMQ。RabbitMQ主端口。对于节点群集,它们必须在。

heishuiloveyou的博客 2807

GO 操作RabbitMQ

docker快速安装mq docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=admins -e RABBITMQ_DEFAULT_PASS=123qwe123 -p15672:15672 -p5672:5672 rabbitmq:management-alpine go 需要安装 go get github.com/streadway/amqp 生产者代码send.go package main

weixin_42562106的博客 2020

【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门

【推荐】RabbitMQ快速入门 1小时上手学会RabbitMQ

少年你真的要止步于此嘛。 2162

分享一个极好的go练手小项目,可以综合应用高并发服务的许多知识点。

客户端在发送请求前,注册一个随机名称的队列,用以接收计算结果的返回值(以下简称回应队列),该队列名会在发送计算请求到“rpc_queue”时附带在请求信息的“ReplyTo”属性中,而服务端在计算完毕后向该队列名发送计算结果即可。接下来找到客户端代码的fibonacciRPC方法的定义位置,该方法即rpc方法的本体,方法中包含了发送请求到rpc服务、阻塞线程以等待返回、获取返回结果后return给方法调用者等三个步骤,对外表现即为一个同步调用方法。我自己完成的demo再稍做修饰,过会儿上传。

ckw1988的专栏 783

RabbitMQ 快速入门

RabbitMQ 快速入门上手RabbitMQ 简介RabbitMQ 安装及使用Centos 安装方式Docker 安装方式RabbitMQ 快速入门交换机直连交换机主题交换机输出交换机 本章知识: 1、RabbitMQ 简介 2、RabbitMQ 安装及使用 3、RabbitMQ 快速入门 4、交换机 RabbitMQ 简介 各大主流中间件对比 ActiveMQ 是 Apache 出品,最流行的...

qq_44641053的博客 704

变色龙哈希函数 Chameleon Hash 可变型区块链

哈希函数 Hash: 众所周知,区块链有着极其优秀的安全性就是因为其充分使用了哈希函数。 哈希简单用一句话来讲,就是:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原出原始字串。 哈希函数特征: 1. 对于任意m作为输入,得到输出的结果,很难找到另一个输入m'  (m'不等于m),使得m'的Hash结果也为同样的输出

新手村 1万+

RabbitMQ的快速入门

RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。

博客 1156

深度学习 tesorflow2.0版本 入门第一章

为什么要学tensflow 深度学习发展迅猛 框架灵活 google开发 公司应用广泛 2.0更加灵活 后面会学习的项目 图像分类 房价预测 泰坦尼克号生存预测 文本分类 文本生成 机器翻译 核心部分 模型训练 tesorboard----> 查看模型训练进度 模型保存和部署 分布式训练-----> 加速训练速度,提升训练效率 TensorFlow常用库:Tfds, tfhub,tensor2tensor 多平台云端环境GPU:Goolgle cloud环境配置,AWS环境配置 kaggle平

weixin_46969441的博客 1236

RabbitMQ3:Java客户端快速入门

AMQP:Advanced Message Queuing Protocol(高级消息队列协议)。解读:首先AMQP是一种协议,类似于http这种,规定了应用程序之间传递消息的标准。该协议与语言、平台无关,因此可实现跨语言、跨平台。Spring AMQP:是基于AMQP协议,定义的一套API规范。提供了模板来发送和接收消息。Spring AMQP官方网址:此时是生产者直接将消息放入队列,都没经过交换机这一环节。可见此入门案例,是helloworld级别的。t=O83A。

casually的博客 1500

别再为数码管引脚发愁了!用STM32的普通IO口驱动TM1650数码管模块(附完整模拟I2C代码)

本文详细介绍了如何利用STM32的普通IO口通过模拟I2C协议驱动TM1650数码管模块,提供了完整的硬件连接方案和软件实现代码。通过模拟I2C技术,开发者可以灵活使用任意GPIO引脚控制多位数码管显示,解决了传统驱动方式占用大量IO资源的问题。文章包含TM1650寄存器解析、亮度控制等实用功能实现,并分享了常见问题排查与性能优化技巧。

weixin_30764771的博客 657

Innovus中_clock_gen skew group的隐藏陷阱:如何避免自动分组导致的时序问题

本文深入剖析了在Innovus工具进行时钟树综合(CTS)时,`_clock_gen` skew group自动分组机制可能引发的隐蔽时序问题。文章通过实际案例,解释了该机制如何错误地将分频寄存器与配置寄存器归为一组,从而破坏时钟域边界并导致post-CTS时序违例,并提供了关闭自动提取、手动精确定义skew group等有效解决方案。

gpu4optimizer的博客 266

RabbitMQ快速入门 整合 SpringBoot

RabbitMQ快速入门 整合 SpringBoot 概述 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力、流量削峰 消息服务中两个重要概念: 消息代理(`message broker`)和目的地(`destination`) 当消息发送者发送消息以后,将由消息代理接管,消息代理保

fenfenfen520a的博客 90

RabbitMQ(一):RabbitMQ快速入门

RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、常用交换器类型、用Docker安装RabbitMQ等。

码上暴富 511

YOLOv12涨点改进| Kimi团队 2026 |独家创新首发、注意力改进篇|爆火AttnRes残差自注意力模块,含多种创新改进,借助残差思想,缓解细节信息在传播过程中被稀释,促进YOLOv12涨点

🔥本文提出AttnRes残差自注意力模块改进YOLOv12模型,通过深度维度的注意力加权机制替代传统固定残差累加方式。该模块能自适应选择更有价值的历史层特征进行聚合,缓解浅层信息在深层传播中被稀释的问题,提升小目标和复杂场景的检测能力。文章详细介绍了模块结构、原理及优势,并提供了完整的代码实现和配置方法,包括三种改进方案:yolov12n_AttnRes.yaml、yolov12n_AttnRes-2.yaml和yolov12n_A2C2f_AttnRes2D.yaml。

Ai缝合怪、助力小伙伴高效发论文 183

【Visual Assist X助手安装问题】Visual Assist X无法安装(双击安装包没反应) | Visual Assist X安装后在Visual Studio中找不到(亲测有效)

本文分享了Visual Assisant X助手的安装与使用问题的详细解决办法,因为网上搜集的信息比较少,所以有一定的参考价值。考虑到很多开发新手会遇到上述问题,可能对Windows系统不熟悉,所以相关操作步骤讲解的很详细!

dvlinker的技术专栏 6万+

RabbitMQ快速入门之进阶

1、confirm 模式的设置 2、return 退回模式的处理 3、消费者 Ack,手动确认 4、消费端限流 (流量削缝) 5、TTL存活时间过期时间 6、死信队列DLX 7、延迟队列 (TTL + DLX)

weixin_54963748的博客 1440

【零基础学习CAPL】——CAN报文的发送(CRC——ChecSum值)

本章主要介绍带有CRC值的报文发送一般报文可使用CANoe的IG模块直接发送,但带有CRC值的报文就只能编写脚本进行发送,以下详细讲解在配合Panel面板情况下,如何进行带有循环冗余码的报文进行报文的发送。

LOVE135149的博客 1910
上一篇: nginx搭建直播系统
下一篇: go mod tidy引入私有仓库包时报错terminal prompts disabled
走,我们去抽风
博客等级 码龄5年 21粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值