go语言操作rabbitMq

最近项目中需要用户自己传入exchange,routingKey,queue,由后端绑定exchange和routingKey到该queue。主要用到的包"github.com/streadway/amqp",该包提供了一些关于rabbitMq的操作

代码大概如下:

var amqpUrl = common.AMQPUrl
var conn *amqp.Connection
var channel *amqp.Channel
func SetupRMQ() (err error) {//该方法连接mqserver
   if channel == nil {
      conn, err = amqp.Dial(amqpUrl)//连接mqserver
      if err != nil {
         return err
      }

      channel, err = conn.Channel()//获得一个channel
      if err != nil {
         return err
      }
      beego.Debug("channel:", channel)
   }
   return nil
}
func PublishServiceMQ(serviceExchange,serviceRoutingKey,serviceQueue,serviceTypeId,msg string)error{//mqConfig的值可以传空,传空表示已经存在
   serviceExchange = strings.Trim(serviceExchange," ")
   serviceRoutingKey = strings.Trim(serviceRoutingKey," ")
   serviceQueue = strings.Trim(serviceQueue," ")
   if err := checkMQ(serviceExchange,serviceRoutingKey,serviceQueue); nil != err {
      beego.Error("非法MQ设置",err)
      return err
   }
   err = SetupRMQ()
   if nil != err {
      beego.Error("连接mq失败,",err)
      return err
   }
   beego.Debug("channel:", channel)
   err = channel.ExchangeDeclare(serviceExchange, "topic", true, false, false, true, nil)//声明exchange
   if nil != err {
      beego.Error("声明exchange失败,",err)
      return err
   }
   _,err = channel.QueueDeclare(serviceQueue, true, false, false, true, nil)//声明queue
   if nil != err {
      beego.Error("声明queue失败,",err)
      return err
   }
   err = channel.QueueBind(serviceQueue, serviceRoutingKey, serviceExchange, true, nil)
//绑定exchange,routingKey到queue
   if nil != err {
      beego.Error("绑定exchange失败,",err)
      return err
   }
   err = channel.Publish(serviceExchange, serviceRoutingKey, false, false, amqp.Publishing{//推送消息
      ContentType: "text/plain",
      Body:        []byte(msg),
   })
   return err
}

func checkMQ(serviceExchange,serviceRoutingKey,serviceQueue string) error{//由于项目的其他地方用到了mq,防止用户mq和我们的mq相同
   //先不校验其是否为空,添加时校验
   if serviceExchange == common.Exchange {
      beego.Error("非法exchange,不可使用,",serviceExchange)
      return errors.New("非法exchange,不可使用")
   }
   if strings.Contains(strings.ToLower(serviceRoutingKey),common.routingKey){
      beego.Error("非法routingKey,不可使用,",serviceRoutingKey)
      return errors.New("非法routingKey,不可使用")
   }
   if strings.Contains(strings.ToLower(serviceQueue),common.Queue){
      beego.Error("非法queue,不可使用,",serviceQueue)
      return errors.New("非法queue,不可使用")
   }
   return nil
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值