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

rabbitMQ安装与简单demo

安装

mac安装有了brew很方便,windows的可参考 win10 安装rabbitMQ详细步骤

brew install rabbitmq

启动

brew services start rabbitmq

关闭

brew services stop rabbitmq

出了问题之后可以重启一下

brew services restart rabbitmq



some issue

某些库下载超时

比如我安装过程中,发现libpng总是下不来

brew --cache -s libpng

输出如下

/Users/andydennis/Library/Caches/Homebrew/downloads/52af0b46c4798c4335195c9e01af657e58b8cb7f3d0fbcad1a753c3aff1ecc93--libpng-1.6.43.tar.xz

手动装一下
在这里插入图片描述

mv libpng-1.6.43.tar.xz "$(brew --cache -s libpng)"

然后

brew install libpng



Failed to connect to raw.githubusercontent.com port 443: Connection refused

报错信息

Fetching openssl@3
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-core/32addadcurl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
Error: rabbitmq: Failed to download resource "openssl@3.rb"

可能是ip解析问题,查询一下 https://www.ipaddress.com/ ,


发现地址是 185.199.108.133, 185.199.109.133, 185.199.110.133185.199.111.133, 于是打开/etc/hosts 文件

sudo vim /etc/hosts

添加下面语句

185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com



不得不说,mac比win慢多了,最后终于装成功了

==>rabbitmq
Management UI: http://localhost:15672
Homebrew-specific docs: https://rabbitmq.com/install-homebrew.htmlTo start rabbitmq now and restart at login:brew services start rabbitmq
Or, if you don't want/need a background service you can just run:CONF_ENV_FILE="/opt/homebrew/etc/rabbitmq/rabbitmq-env.conf" /opt/homebrew/opt/rabbitmq/sbin/rabbitmq-server



配置

激活一下组件 rabbitmq-plugins enable rabbitmq_management

andydennis@andydennisdeMBP ~ % rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:rabbitmq_amqp1_0rabbitmq_managementrabbitmq_management_agentrabbitmq_mqttrabbitmq_stomprabbitmq_streamrabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
Plugin configuration unchanged.

开启 brew services start rabbitmq, 访问 http://localhost:15672
初始用户名和密码都是guest

判断有无开启成功可查看端口5672 (默认端口,若修改了则按修改的端口) 有无无监听

andydennis@andydennisdeMBP ~ % lsof -i :5672
COMMAND    PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
beam.smp 68981 andydennis   62u  IPv4 0x226aed36751b928f      0t0  TCP localhost:amqp (LISTEN)

code

依赖

在一个新文件夹,先 go mod init go-rabbitmqgo mod tidy下更新一下依赖。

编写代码


consumer.go

package mainimport "go-rabbitmq/rabbitmq"func main() {rabbitMQ := rabbitmq.NewSimpleRabbitMQ("test-one")rabbitMQ.Consumer()
}

producer.go

package mainimport ("fmt""strconv""time""go-rabbitmq/rabbitmq"
)func main() {rabbitMQ := rabbitmq.NewSimpleRabbitMQ("test-one")for i := 0; i < 100000; i++ {time.Sleep(1000 * time.Millisecond)rabbitMQ.Publish("新消息 " + strconv.Itoa(i))fmt.Println("发送成功")}
}

rabbitmq.go

package rabbitmqimport ("fmt""log""github.com/streadway/amqp"
)const MQURL = "amqp://guest:guest@localhost:5672"type RabbitMQ struct {conn      *amqp.Connectionchannel   *amqp.ChannelqueueName stringexchange  stringkey       stringmqurl     string
}func NewRabbitMQ(queueName string, exchange string, key string) *RabbitMQ {rabbitMQ := &RabbitMQ{queueName: queueName,exchange:  exchange,key:       key,mqurl:     MQURL,}dial, err := amqp.Dial(rabbitMQ.mqurl)rabbitMQ.failOnErr(err, "创建连接失败")rabbitMQ.conn = dialrabbitMQ.channel, err = rabbitMQ.conn.Channel()rabbitMQ.failOnErr(err, "获取通道失败")return rabbitMQ
}func (r *RabbitMQ) failOnErr(err error, message string) {if err != nil {log.Fatalf("%s:%s\n", err, message)panic(fmt.Sprintf("%s:%s\n", err, message))}
}func (r *RabbitMQ) destory() {r.channel.Close()r.conn.Close()
}func NewSimpleRabbitMQ(queueName string) *RabbitMQ {return NewRabbitMQ(queueName, "", "")
}func (r *RabbitMQ) Publish(message string) {_, err := r.channel.QueueDeclare(r.queueName,//是否持久化false,//是否为自动删除false,//是否具有排他性false,//是否阻塞false,//额外属性nil,)if err != nil {panic(err)}r.channel.Publish(r.exchange,r.queueName,false,false,amqp.Publishing{ContentType: "text/plain",Body:        []byte(message),})}func (r *RabbitMQ) Consumer() {_, err := r.channel.QueueDeclare(r.queueName, false, false, false, false, nil)if err != nil {panic(err)}//2、接收消息msgs, err := r.channel.Consume(r.queueName,//用来区分多个消费者"",//是否自动应答true,//是否具有排他性false,//如果设置为true,表示不能将同一个connection中发送的消息传递给这个connection中的消费者false,//消息队列是否阻塞false,nil,)if err != nil {panic(err)}forever := make(chan bool)go func() {for d := range msgs {log.Printf("Received a message : %s", d.Body)}}()log.Printf("[*] Waiting for messagees,To exit press CTRL+C")<-forever}



运行

(1) cd consumer 进入消费者目录, 把消费者运行起来 go run consumer.go
(2) cd producer 进入生产者目录,让生产者制造消息 go run producer.go


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [数据集][目标检测]航拍屋顶检测数据集VOC+YOLO格式458张3类别
  • python办公自动化:使用`python-docx`根据模板自动化生成文档
  • 【漏洞复现】SuiteCRM responseEntryPoint Sql注入漏洞
  • 【收藏】SaaS企业如何利用KOL营销实现用户增长
  • 【电脑使用耳机录音注意事项】
  • 一文搞定MybatisPlus
  • CentOS 7 部署iscsid 存储服务
  • ffmpeg最新5.1.6版本源码安装
  • 邻接表的具体实例
  • Linux简单介绍(1)
  • CVPR 2024论文分享┆LMDrive:基于大模型的闭环端到端自动驾驶
  • 【Unity3D小技巧】Unity3D中实现对InputField的自定义输入限制实例
  • [数据集][目标检测]铁轨缺陷检测数据集VOC+YOLO格式4020张4类别
  • 埃筛C++写法
  • BUUCTF PWN wp--pwn1_sctf_2016
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • EventListener原理
  • Java 网络编程(2):UDP 的使用
  • js继承的实现方法
  • magento 货币换算
  • Mysql数据库的条件查询语句
  • Node项目之评分系统(二)- 数据库设计
  • python_bomb----数据类型总结
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 基于组件的设计工作流与界面抽象
  • 如何选择开源的机器学习框架?
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • # include “ “ 和 # include < >两者的区别
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • $.ajax()方法详解
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)ORM
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @ComponentScan比较
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [14]内置对象
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Android]How to use FFmpeg to decode Android f...
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BT]BUUCTF刷题第8天(3.26)
  • [C++]——继承 深继承
  • [CCIE历程]CCIE # 20604
  • [Cloud Networking] Layer3 (Continue)