You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rabbitmq/rabbitmq.go

87 lines
1.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package rabbitmq
import (
"fmt"
"github.com/streadway/amqp"
"log"
)
var Rabbitmq = &rabbitmq{}
type rabbitmq struct {
conn *amqp.Connection
}
// InitRabbitmq @Title 初始化rabbitmq
func InitRabbitmq(host string, port int, user, password string) {
var err error
Rabbitmq.conn, err = amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s:%d/", user, password, host, port))
if err != nil {
log.Fatal("rabbitmq链接失败err:", err)
}
return
}
// Publish @Title 发送消息
// @Param exchangeName string true "指定发送的交换机"
// @Param msg string true "发送消息内容"
// @Param delay int64 false "延时发送秒数"
func (r *rabbitmq) Publish(exchangeName, msg string, delay ...int64) error {
ch, err := r.conn.Channel()
if err != nil {
return err
}
header := amqp.Table{}
if len(delay) > 0 && delay[0] > 0 {
header["x-delay"] = delay[0] * 1000
}
return ch.Publish(
exchangeName, //交换
"", //队列名称
false, //强制为
false, //立即
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(msg),
Headers: header,
})
}
// Consume @Title 消费队列
// @Param queueName string true "队列名称"
// @Param autoAck bool true "是否自动确认"
// @Param callback func(amqp.Delivery)) true "回调处理"
func (r *rabbitmq) Consume(queueName string, autoAck bool, callback func(amqp.Delivery)) error {
ch, err := r.conn.Channel()
if err != nil {
return err
}
//消费队列
msgs, err := ch.Consume(
queueName, //队列名称
"", //消费者
autoAck, //自动确认
false, //排他
false,
false,
nil,
)
if err != nil {
return err
}
forever := make(chan bool)
go func() {
for d := range msgs {
callback(d)
}
}()
<-forever
return nil
}
// Close @Title 关闭资源
func (r *rabbitmq) Close() {
defer Rabbitmq.conn.Close()
}