rabbitmq.go 1.12 KB
Newer Older
haoyanbin's avatar
haoyanbin committed
1 2 3 4
package mq

import (
	"fmt"
zhengxiuming's avatar
zhengxiuming committed
5

haoyanbin's avatar
haoyanbin committed
6 7 8
	"github.com/streadway/amqp"
)

zhengxiuming's avatar
zhengxiuming committed
9
var mqUrl = "amqp://admin:Dbc_rabbit_mq123@39.97.234.228:5682/"
haoyanbin's avatar
haoyanbin committed
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

// 除了simple 模式外、其他的模式都是由 队列 交换机 key 不同组合实现的
type RabbitMQ struct {
	conn      *amqp.Connection
	channel   *amqp.Channel
	QueueName string //队列
	Exchange  string //交换机
	Key       string //key
	MQUrl     string //连接信息
}

// 创建RabbitMQ 实例
func newRabbitMQ(queueName, exchange, key string) (*RabbitMQ, error) {
	rabbitMQ := &RabbitMQ{
		QueueName: queueName,
		Exchange:  exchange,
		Key:       key,
		MQUrl:     mqUrl,
	}

	var err error
	// dial mq
	rabbitMQ.conn, err = amqp.Dial(rabbitMQ.MQUrl)
	if err != nil {
		return nil, err
	}
haoyanbin's avatar
haoyanbin committed
36

haoyanbin's avatar
haoyanbin committed
37 38 39 40
	rabbitMQ.channel, err = rabbitMQ.conn.Channel()
	if err != nil {
		return nil, err
	}
haoyanbin's avatar
haoyanbin committed
41 42 43 44 45 46 47 48 49 50 51
	_, err = rabbitMQ.channel.QueueDeclare(
		rabbitMQ.QueueName,
		true,
		false,
		false,
		false,
		nil,
	)
	if err != nil {
		return nil, err
	}
haoyanbin's avatar
haoyanbin committed
52 53 54 55 56 57 58 59 60 61

	return rabbitMQ, nil
}

// 错误处理
func (r *RabbitMQ) failOnErr(err error, message string) {
	if err != nil {
		panic(fmt.Sprintf("%s:%s", err.Error(), message))
	}
}