simple模式下rabbitmq的代码
2024-10-21 23:16:44
simple模式代码
package RabbitMQ
import (
"fmt"
"github.com/streadway/amqp"
"log"
)
const MQURL = "amqp://guest:guest@127.0.0.1:5672/imooc"
//创建rabbitmq结构体实例
type RabbitMQ struct {
conn *amqp.Connection
channel *amqp.Channel
QueueName string
Exchange string
Key string
Mqurl string
}
func NewRabbitMQ(queueName string, Exchange string, key string) *RabbitMQ {
rabbitmq := &RabbitMQ{QueueName: queueName, Exchange: Exchange, Key: key, Mqurl: MQURL}
var err error
rabbitmq.conn, err = amqp.Dial(rabbitmq.Mqurl)
rabbitmq.failOnErr(err, "创建连接错误")
rabbitmq.channel, err = rabbitmq.conn.Channel()
rabbitmq.failOnErr(err, "获取channel失败")
return rabbitmq
}
//断开channel和connection
func (r *RabbitMQ) Destroy() {
r.channel.Close()
r.conn.Close()
}
//错误处理函数
func (r *RabbitMQ) failOnErr(err error, message string) {
if err != nil {
log.Fatalf("%s:%s", message, err)
panic(fmt.Sprintf("%s%s", message, err))
}
}
//simple模式step1: rabbitmq的实例
func NewRabbitMQSimple(queueName string) *RabbitMQ {
return NewRabbitMQ(queueName, "", "")
}
//简单模式step:2.简单模式下生产代码
func (r *RabbitMQ) PublishSimple(message string) {
//申请队列,如果队列不存在会自动创建,如果存在则跳过创建
//保证队列存在,消息能发送到队列中
_, err := r.channel.QueueDeclare(
r.QueueName,
//是否持久化
false,
//是否为自动删除
false,
//是否具有排他性
false,
//是否阻塞
false,
//额外属性
nil,
)
if err != nil {
fmt.Println(err)
}
//发送消息到队列中
err = r.channel.Publish(
r.Exchange,
r.QueueName,
//如果为true,根据exchange类型和routkey规则,如果无法找到符合条件的队列那么会把发送的消息返回给发送者
false,
false,
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(message),
})
if err != nil {
fmt.Println(err)
}
}
func (r *RabbitMQ) ConsumeSimple() {
_, err := r.channel.QueueDeclare(
r.QueueName,
//是否持久化
false,
//是否为自动删除
false,
//是否具有排他性
false,
//是否阻塞
false,
//额外属性
nil,
)
if err != nil {
fmt.Println(err)
}
msgs, err := r.channel.Consume(
r.QueueName,
//用来区分多个消费者
"",
//是否自动应答
true,
//是否具有排他性
false,
//如果设置为true,表示不能将同一个connection中发送的消息传递给这个connection中的消费者
false,
//队列消费是否阻塞
false,
//其他属性
nil,
)
if err != nil {
fmt.Println(err)
}
forever := make(chan bool)
//启用协程处理消息
go func() {
for d := range msgs {
//实现我们要处理的逻辑函数
log.Printf("Received a message:%s")
fmt.Println(string(d.Body))
}
}()
log.Printf("[*] waiting for messages,to exit press CTRL+C")
<-forever
}
simple模式消费者代码
package main
import "immoc-rabbitmq/RabbitMQ"
func main() {
rabbitmq := RabbitMQ.NewRabbitMQSimple("imoocSimple")
rabbitmq.ConsumeSimple()
}
simple模式生产者代码
package main
import (
"fmt"
"immoc-rabbitmq/RabbitMQ"
)
func main() {
rabbitmq := RabbitMQ.NewRabbitMQSimple("imoocSimple")
rabbitmq.PublishSimple("hello imooc!")
fmt.Println("发送成功!")
}
最新文章
- PHP语言中使用JSON和将json还原成数组
- odoo 中X2many类型的视图继承
- 添加Properties取值和枚举取值
- Android数据存储之SQLite的操作
- HDU 1023 Train Problem II (卡特兰数,经典)
- Javaweb里面的filter,listener,servlet
- 浏览器阻止window.open的解决方案
- STM32串口通信USART1转USART2问题解决
- css 中的若干心得
- 201521123057 《Java程序设计》第10周学习总结
- 453. Minimum Moves to Equal Array Elements
- vmware 12 安装 mac os 10.12正式版
- day26.面向对象-反射封装内置方法
- C#.net使用DotNetCharting控件生成报表统计图
- 随笔一个dom节点绑定事件
- Neo4j安装&;入门&;一些优缺点
- 设置一个div网页滚动时,使其固定在头部,当页面滚动到距离头部300px时,隐藏该div,另一个div在底部,此时显示;当页面滚动到起始位置时,头部div出现,底部div隐藏
- Event(事件)
- c# 项目的导入
- SVN同步版本库与网站目录2
热门文章
- centos发布 7.7.1908版本了,怎么把老版本更新到新版本了?
- Django content-type组件
- 01-打印Hello World、变量
- Centos 7 添加开机启动
- python ID3决策树实现
- django-nginx与uwsgi项目部署
- QLineEdit 按键Tab键时 显示历史记录
- 第二章:jQuery初探
- javascript设计模式之适配器模式
- 解决此报错:Cannot create Woodstox XMLInputFactory: java.lang.NoClassDefFoundError: com/ctc/wstx/stax/WstxInput