• Golang使用RabbitMQ消息中间件amqp协议


    "github.com/streadway/amqp"

    Publish发布

    // amqp://<user>:<password>@<ip>:<port>
    var addr = "amqp://test:test123@127.0.0.1:5672" //test
    
    func main() {
          
        // 建立连接
        conn, err := amqp.Dial(addr)
        if nil != err {
    	logs.Error(err)
    	return
        }
    
        defer conn.Close()
        // 申请通道
        ch, err := conn.Channel()
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
        defer ch.Close()
        // 定义交换“direct”、“fanout”、“topic”和“headers”
        err = ch.ExchangeDeclare("happy", amqp.ExchangeTopic, true, false, false, false, nil)
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
        data = fmt.Sprintf("hello,world!!!")
            //a.b.c.d.e 为发布key,以.分割;
        err = ch.Publish("happy", "a.b.c.d.e", false, false,
    	    amqp.Publishing{
    		    ContentType:  "text/plain",
    		    Body:         []byte(data),
    		    DeliveryMode: amqp.Transient, // 1=non-persistent, 2=persistent
    	    })
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
    }
    

    Recover 接收

    // amqp://<user>:<password>@<ip>:<port>
    var addr = "amqp://test:test123@127.0.0.1:5672" //test
    
    func main() {
    
        // 建立连接
        conn, err := amqp.Dial(addr)
        if nil != err {
                logs.Error(err)
    	    return
        }
    
        defer conn.Close()
        // 申请通道
        ch, err := conn.Channel()
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
        defer ch.Close()
        // 定义交换
        err = ch.ExchangeDeclare("happy", amqp.ExchangeTopic, true, false, false, false, nil)
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
        queName := "test.test1.test2"
        topic := "a.#"
    
    
        // 定义通道
        que, err := ch.QueueDeclare(queName, false, false, false, false, nil)
        if nil != err {
        	    logs.Error(err)
        }
    
        err = ch.QueueBind(que.Name, topic, "happy", false, nil)
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
        msges, err := ch.Consume(que.Name, "", true, false, false, false, nil)
        if nil != err {
    	    logs.Error(err)
    	    return
        }
    
        logs.Info("start recv")
    
        for msg := range msges {
    	    fmt.Println(">>> %s", string(msg.Body))
    	
        }
    
    }
    

    http管理端口是15672

    注:队列应先注册一次,才能收到消息

  • 相关阅读:
    由ORACLE:ORA-28001: the password has expired(密码过期)引起ODI资料库连接失败
    由ODI初始化资料档案库(RUC)引起修改ORACLE字符集(ZHS16GBK-AL32UTF8)
    如何面对被抛弃的System.Data.OracleClient
    CS231n 2016 通关 第二章-KNN 作业分析
    CS231n 2016 通关 第二章-KNN
    CS231n 2016 通关 第一章-内容介绍
    加特征加正则
    ML 徒手系列说明
    caffe 入门实例2 如何写一个模型
    caffe 入门实例3 fine-turning
  • 原文地址:https://www.cnblogs.com/TSlover/p/11613759.html
Copyright © 2020-2023  润新知