当前位置: 首页 > news >正文

go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用

在 Go 语言中对接阿里云消息队列(MQ)的 RabbitMQ 配置与调用,首先需要安装和配置相关的 Go 库,并了解如何通过 RabbitMQ 与阿里云消息队列进行交互。

### 步骤一:安装 RabbitMQ Go 客户端库

阿里云的消息队列(MQ)实际上是基于 **RabbitMQ** 实现的,因此可以使用标准的 RabbitMQ Go 客户端库来对接。

你可以使用 [github.com/rabbitmq/amqp091-go](github.com/rabbitmq/amqp091-go) 库,这是 Go 语言中常用的 RabbitMQ 客户端库。

```bash

go get github.com/rabbitmq/amqp091-go


```

### 步骤二:配置阿里云消息队列的连接信息

首先需要获取阿里云消息队列的连接信息,包括:
- **接入点(Endpoint)**:这是消息队列的服务器地址,通常可以在阿里云控制台的消息队列管理页面找到。
- **AccessKey 和 SecretKey**:这是用于认证和访问阿里云服务的凭证。

### 步骤三:创建连接和通道

在 Go 代码中,使用 AMQP 协议连接到 RabbitMQ 服务。阿里云的消息队列支持 AMQP 协议,所以可以直接通过它来连接。```go

package mainimport ("fmt""log""github.com/streadway/amqp"
)func main() {// 阿里云 MQ 的连接信息amqpURL := "amqp://<AccessKey>:<SecretKey>@<Endpoint>/vhost" // 根据实际情况填写conn, err := amqp.Dial(amqpURL)if err != nil {log.Fatalf("Failed to connect to RabbitMQ: %s", err)}defer conn.Close()// 创建一个通道(Channel)ch, err := conn.Channel()if err != nil {log.Fatalf("Failed to open a channel: %s", err)}defer ch.Close()// 创建一个队列q, err := ch.QueueDeclare("testQueue", // 队列名称true,        // 是否持久化false,       // 是否自动删除false,       // 是否具有独占权限false,       // 是否阻塞nil,         // 额外属性)if err != nil {log.Fatalf("Failed to declare a queue: %s", err)}fmt.Printf("Queue declared: %s\n", q.Name)// 发布一条消息到队列body := "Hello, this is a test message!"err = ch.Publish("",         // 默认交换机q.Name,     // 队列名称false,      // 是否等待服务器确认false,      // 是否设置强制推送amqp.Publishing{ContentType: "text/plain",Body:        []byte(body),})if err != nil {log.Fatalf("Failed to publish a message: %s", err)}fmt.Printf("Message sent: %s\n", body)
}


```

### 代码解释:
- **amqp.Dial**:连接到 RabbitMQ(阿里云 MQ)的消息队列服务,使用的是 AMQP 协议。在 URL 中需要包含 **AccessKey** 和 **SecretKey**,格式是 `amqp://<AccessKey>:<SecretKey>@<Endpoint>/vhost`。
  - `<AccessKey>` 和 `<SecretKey>`:你在阿里云管理控制台中创建的 API 密钥。
  - `<Endpoint>`:你可以从阿里云 MQ 控制台获取到的接入点地址。
  - `/vhost`:虚拟主机,通常是 `/`,可以根据实际情况修改。
  
- **QueueDeclare**:声明队列。队列是消息的载体,在队列中存放的是等待被消费者取走的消息。这里使用了 **持久化队列**(`true`),表示即使服务器重启,队列和消息也不会丢失。

- **Publish**:将消息发送到指定的队列中。

### 步骤四:消费消息

除了发送消息,消费者(Consumer)也需要从队列中获取消息并进行处理。```go

package mainimport ("fmt""log""github.com/streadway/amqp"
)func main() {// 阿里云 MQ 的连接信息amqpURL := "amqp://<AccessKey>:<SecretKey>@<Endpoint>/vhost"conn, err := amqp.Dial(amqpURL)if err != nil {log.Fatalf("Failed to connect to RabbitMQ: %s", err)}defer conn.Close()// 创建一个通道(Channel)ch, err := conn.Channel()if err != nil {log.Fatalf("Failed to open a channel: %s", err)}defer ch.Close()// 声明队列(与生产者端一致)q, err := ch.QueueDeclare("testQueue", // 队列名称true,        // 持久化false,       // 非自动删除false,       // 非独占false,       // 非阻塞nil,         // 额外属性)if err != nil {log.Fatalf("Failed to declare a queue: %s", err)}// 获取消息msgs, err := ch.Consume(q.Name,    // 队列名称"",        // 消费者标签true,      // 自动应答false,     // 独占false,     // 不阻塞false,     // 不获取nil,       // 额外属性)if err != nil {log.Fatalf("Failed to register a consumer: %s", err)}fmt.Println("Waiting for messages. To exit press CTRL+C")// 消费消息for msg := range msgs {fmt.Printf("Received a message: %s\n", msg.Body)}
}


```

### 代码解释:
- **Consume**:消费者从队列中获取消息并处理。你可以设置 `auto-ack`(自动应答)为 `true`,表示 RabbitMQ 在消息被接收后自动确认消息。如果需要手动确认,可以设置为 `false`,并手动发送确认。
- 消费者会一直运行,并等待新的消息到来。

### 步骤五:测试和运行

1. 启动消费者程序(在一个终端中)。
2. 启动生产者程序(在另一个终端中)。生产者会向队列发送一条消息。
3. 消费者会自动收到并处理消息。

遇到错误如下

{"@timestamp":"2024-12-09T15:42:10.657+08:00","caller":"mq/consumer.go:55","content":"Dial: Exception (403) Reason: \"no access to this vhost\"","level":"error"}

{"@timestamp":"2024-12-09T15:42:10.657+08:00","caller":"mq/consumer.go:37","content":"Consumer encountered an error and needs to be restarted, error: Exception (403) Reason: \"no access to this vhost\"","level":"error"}

原因:主账号购买的服务,子账号创建的mq用户,没有授权给子账号的mq控制台管理权限

错入如下

{"@timestamp":"2024-12-09T17:56:39.870+08:00","caller":"mq/consumer.go:74","content":"Exchange Declare: Exception (406) Reason: \"ExchangeInBuilt[amq.topic], ReqId:6756BED74138333200852364, ErrorHelp[exchange=amq.topic, https://c.tb.cn/F3.Zro5uI]\"","level":"error"}

{"@timestamp":"2024-12-09T17:56:39.870+08:00","caller":"mq/consumer.go:37","content":"Consumer encountered an error and needs to be restarted, error: Exception (406) Reason: \"ExchangeInBuilt[amq.topic], ReqId:6756BED74138333200852364, ErrorHelp[exchange=amq.topic}

错误原因:官方默认的交换机 amq.topic 是 RabbitMQ 的内置交换机,不能重新声明。需要修改消配置的定义新的交换机go-amp.topic,跳过系统交换机声明的步骤。

### 注意事项:
- 确保你的阿里云 MQ 服务已经开启,并且配置了正确的接入点、密钥和虚拟主机。


- 可以根据需求选择是否启用持久化、自动确认等选项。
- 在生产环境中,确保对消息队列进行有效的监控和错误处理,以保证系统的稳定性和可靠性。

通过这种方式,你就可以在 Go 语言中对接阿里云的消息队列(MQ)并实现与 RabbitMQ 的基本交互。

相关文章:

go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用

在 Go 语言中对接阿里云消息队列&#xff08;MQ&#xff09;的 RabbitMQ 配置与调用&#xff0c;首先需要安装和配置相关的 Go 库&#xff0c;并了解如何通过 RabbitMQ 与阿里云消息队列进行交互。 ### 步骤一&#xff1a;安装 RabbitMQ Go 客户端库 阿里云的消息队列&#x…...

《Vue进阶教程》第四课:reactive()函数详解

往期内容&#xff1a; 《Vue零基础入门教程》合集&#xff08;完结&#xff09; 《Vue进阶教程》第一课&#xff1a;什么是组合式API 《Vue进阶教程》第二课&#xff1a;为什么提出组合式API 《Vue进阶教程》第三课&#xff1a;Vue响应式原理 通过前面的学习, 我们了解到r…...

【开源】A065—基于SpringBoot的库存管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

memmove函数(带图详解)

c语言系列 文章目录 c语言系列一、memmove函数介绍1.1、函数基本功能1.2、函数参数2.3、函数返回值 二、memmove的使用2.1、拷贝字节不可大于目标空间2.2、同一空间拷贝 三、函数功能的模拟实现3.1、函数参数及其返回值的设定3.2、函数体实现 四、代码实现 一、memmove函数介绍…...

【Java数据结构】时间和空间复杂度

本章开始将进入数据结构的知识&#xff0c;时间复杂度主要衡量的是一个算法的运行速度&#xff0c;而空间复杂度主要衡量一个算法所需要的额外空间&#xff0c;。 时间复杂度 算法中执行的次数决定了时间复杂度。 在计算执行次数时&#xff0c;只需要计算大概的次数&#xff…...

八斗深度学习

八斗深度学习第二周笔记 一、深度学习步骤&#xff1a;1. 选定模型结构2. 模型参数随机初始化3. 构造模型损失函数4. 选择优化算法并设置超参数5. 数据准备与预处理6. 训练模型7. 模型评估8. 测试模型9. 应用模型 损失函数极小值、导向意义 超参数的影响迭代次数epoch批次量大小…...

安卓报错Switch Maven repository ‘maven‘....解决办法

例如&#xff1a;Switch Maven repository ‘maven(http://developer.huawei.com/repo/)’ to redirect to a secure protocol 在库链接上方添加配置代码&#xff1a;allowInsecureProtocol true...

Scala编程技巧:正则表达式与隐式转换

1. 引言 在Scala编程中&#xff0c;正则表达式和隐式转换是处理字符串匹配和类型转换的强大工具。本文将通过一个实用的示例——电话号码和身份证号码验证器&#xff0c;来展示如何使用这些工具。 2. 知识概括 2.1 正则表达式基础 正则表达式是用于字符串搜索和匹配的强大工…...

UnityShaderLab 实现黑白着色器效果

实现思路&#xff1a;取屏幕像素的RGB值&#xff0c;将三个通道的值相加&#xff0c;除以一个大于值使颜色值在0-1内&#xff0c;再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Bl…...

在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)

SSH 在 linux 中是一种重要的系统组件&#xff0c;用户可以使用 SSH 来远程连接 linux 系统的计算机&#xff0c;或者传输文件。不过在 win10 以前&#xff0c;windows 并不原生支持 SSH&#xff0c;需要借助第三方工具来使用 SSH 功能。而实际上&#xff0c;微软在 2015 年就曾…...

在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)

Stable Diffusion无疑是AIGC领域中的AI绘画利器&#xff0c;具有以下显著优势&#xff1a; 1、开源性质&#xff0c;支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点&#xff0c;但缺点也是不言而喻的&#xff0c;由于AI绘画的整个过程以及现…...

ubuntu存储空间不足快速解决

几个自己常用的释放空间命令&#xff0c;备忘 将文件夹下的文件按从大到小排列 ls -lhS /var/log/syslog 过大 sudo truncate -s 0 /var/log/syslog /var/log/Xorg.0.log.old过大 sudo truncate -s 0 /var/log/Xorg.0.log.old 清理系统日志文件&#xff1a; sudo journalctl --…...

Prescan simulink carsim联合仿真平台搭建问题总结

解决办法主要来自忠厚的老王&#xff1a;自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 这部分直接复制的老王视频的&#xff1a; Q1:prescan安装了&#xff0c;但是找不到Demo_Carsim3D A1:这个文件夹是我自己建立的不是prescan自带的&#xff0…...

STM32(HAL_工程模板的搭建)

目录 一、准备文件 二、创建工程 三、创建分组 四、配置文件处理 五、编译错误处理 一、准备文件 准备HAL库文件: ST官网( 意法半导体-STMicroelectronics )搜索STM32Cube, 本文使用“STM32Cube_FW_F4_V1.24.1” 版本的HAL库, 使用的是F4的库文件。 创建文件&#xff1a…...

Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)

文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用&#xff08;操作环境变量&#xff09; 七、虚拟环境 介绍Mac/linux创建虚拟…...

CAD C# 批量替换当前图中块

本案例功能为选择当前文档中一个块&#xff08;旧块&#xff09;&#xff0c;然后选择新图元&#xff08;新块&#xff09;&#xff0c;运行插件后新块将替换图中所有的旧块。 效果如下&#xff1a; public static class Class1{//选取对象替换块定义[CommandMethod("TT&…...

Android -- [SelfView] 自定义多行歌词滚动显示器

Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明&#xff1b;* 2. 外部可控制进度变化&#xff1b;* 3. 支持屏幕拖动调节进度&#xff08;回调给外部&#xff09;&#xff1b;效果 歌词文件&#xff08;.lrc&#xff09; 一. 使用…...

vscode 配置C/C++环境控制台参数

您可以通过以下步骤在VS Code中配置C/C环境的控制台参数&#xff1a; 1&#xff0c;打开VS Code并进入您的C/C项目 2&#xff0c;点击左侧的"调试"图标&#xff0c;然后点击顶部的齿轮图标&#xff0c;选择“launch.json”。 3&#xff0c;在"launch.json&qu…...

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段&#xff1a;协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录&#xff08;Resource Record, RR&#xff09;格式&#xff1a;被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…...

多系统对接的实现方案技术分析

前言 随着信息化和大数据时代的到来&#xff0c;数据资产变得至关重要&#xff0c;企业纷纷上线多种软件系统和移动端应用以适应这一变化。这些系统和应用虽然发挥了各自的优势&#xff0c;但也导致了信息孤岛问题。为了解决这一问题&#xff0c;数据中台和异构系统集成技术应…...

kv类型算子使用

对kv类型的RDD数据集进行操作。 keys """ 获取所有的key转换算子"""inputRdd sc.parallelize([(laoda, 11), (laoer, 22), (laosan, 33), (laosi, 44)]) print(inputRdd.keys().collect()) # [laoda, laoer, laosan, laosi] values "&…...

3维建模blender

官网稳定版下载&#xff1a;https://www.blender.org/download/lts/ windows有安装版和portable版 教程&#xff1a;https://www.bilibili.com/video/BV1kX4y1m7G5 1. 基础操作 场景操作 场景位移&#xff1a;shift鼠标中键长按场景旋转&#xff1a;鼠标中键长按场景缩放&…...

百问FB网络编程 - UDP编程简单示例

6.5 UDP编程简单示例 ​ UDP服务器首先进行初始化操作&#xff1a;调用函数socket创建一个数据报类型的套接字&#xff0c;函数bind将这个套接字与服务器的公认地址绑定在一起。然后调用函数recvfrom接收UDP客户机的数据报。UDP客户机首先调用函数socket创建一个数据报套接字&…...

面试题:什么是ThreadLocal,如何实现的?

强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 你是否还在为简历无人阅读而感到沮丧&#xff1f;是否因为寻觅不到理想的工作机会而感到焦虑不安&#xff1f;试试:看看…...

js后端开发之Next.js、Nuxt.js 与 Express.js

后端js之Next.js、Nuxt.js 与 Express.js 在现代 Web 开发中&#xff0c;JavaScript 已经成为前后端通用的编程语言&#xff0c;而选择合适的后端框架则是构建高效、可扩展应用程序的关键。本文将带你深入了解三个流行的 JavaScript 后端框架&#xff1a;Next.js、Nuxt.js 和 …...

飞牛Nas如何实现阿里云盘、百度网盘的资料迁移!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 如何使用飞牛NAS实现阿里云盘与百度网盘的数据互相迁移 📒📝 操作步骤注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 你是否有将百度网盘的文件迁移到阿里云盘,或是将阿里云盘的资料转移到百度网盘的需求?本文将给大家演示如…...

如何在小米平板5上运行 deepin 23 ?

deepin 23 加入了 ARM64 支持&#xff0c;这里尝试将 deepin 系统刷入平板中&#xff0c;平常使用中&#xff0c;带个笔记本电脑有时候也会嫌比较麻烦&#xff0c;把 Linux 系统刷入平板中既满足了使用需要&#xff0c;又满足了轻便的需求。为什么不使用 Termux &#xff1f;虽…...

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字&#xff1b;结束一般使用stop/end关键字。基础用法包括&#xff1a; start ... stopstart ...…...

操作系统:进程、线程与作业

背景介绍&#xff1a; 因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。 多道程序致力于提高处理机、设备、内存等各种资源的利用率&#xff0c;从而提高系统效率&#xff0c;也就是吞吐量&#xff0c;吞吐量定义为单位时…...

先验地图--slam学习笔记

先验信息 (Prior Information) 先验信息指的是在收集新数据之前已有的知识或假设。这种信息可以来自之前的实验、历史数据、理论模型或专家意见。 地图信息&#xff1a;在无人驾驶中&#xff0c;车辆通常会预先加载高精度地图数据&#xff0c;这些地图数据提供了道路布局、车…...

网络网站首页设计/西安网站外包

此错误表示您的代码或您在应用程序中使用的任何外部库都在使用SLF4J库(一个开放源代码日志记录库)&#xff0c;但无法找到所需的JAR文件&#xff0c;例如slf4j-api-1.7.2.jar因此它是在线程“ main” java.lang.NoClassDefFoundError&#xff1a; org/slf4j/LoggerFactory 。 如…...

自拍做爰视频网站/电商入门基础知识

shell实战 1. 注意事项 - 开头加解释器#!/bin/bash# 以及相关注释说明 - 变量名大写、局部变量小写&#xff0c;函数名小写 - 遇到执行非0时退出脚本的命令&#xff1a;set -e - 打印执行过程的命令&#xff1a;set -x - 写脚本一定要先测试再上生产环境2. 获取随机字符串或数…...

为政府做网站的公司/韩国电视剧

重新安装ruby即可解决 brew install ruby转载于:https://www.cnblogs.com/kaid/p/7718368.html...

wordpress视频教程下载地址/app怎么开发出来的

关于cocos2d-x下Lua调用C的文档看了不少&#xff0c;但没有一篇真正把这事给讲明白了&#xff0c;我自己也是个初学者&#xff0c;摸索了半天&#xff0c;总结如下&#xff1a;cocos2d-x下Lua调用C这事之所以看起来这么复杂、网上所有的文档都没讲清楚&#xff0c;是因为存在5个…...

2024年利润300万以内企业所得税/鸡西seo

一、TCP的工作过程 首先TCP是一种面向连接的&#xff0c;可靠的&#xff0c;基于字节流的传输层通信协议。TCP的工作过程可以分为三个阶段&#xff1a;一、连接的建立&#xff1b; 二、传输数据&#xff1b; 三、断开连接&#xff0c;下面就对这三个过程分别介绍下&#xff1a…...

https的网站怎么做/江苏建站

MVC的组成部分&#xff1a;模型 (Model)代表你的数据结构。通常来说&#xff0c;你的模型类将包含取出、插入、更新你的数据库资料这些功能。视图 (View)是展示给用户的信息。一个视图通常是一个网页。控制器 (Controller)是模型、视图以及其他任何处理 HTTP 请求所必须的资源之…...