golang-rabbitmq 客户端参数

一、交换器声明方法参数说明

     func (ch *Channel) ExchangeDeclare(name, kind string, durable, autoDelete, internal, noWait bool, args Table) error

  1.  参数 name : 交换器的名称
  2.  参数 kind :交换器的类型 【fanout、direct、topic】 
  3.  参数 durable : 设置是否持久化,true :表示持久化。持久化可以将交换器存盘,在服务器重启的时候不会丢失。
  4.  参数 autoDelete : 设置是否自动删除。true : 表示自动删除,自动删除的前提是至少有一个队列或者交换器与这个交换                            器绑定,之后所有与这个交换器绑定的队列或交换器都与这个交换器解绑。注意不能错误把这个参数                            理解为:”当与此交换器连接的客户端都断开时候,RabbitMQ 会删除这个交换器“

   5. internal :  设置是否是内置的,如果设置为 true , 则表示内置交换器,客户端程序无法直接发送消息到这个交换器中。

   6. noWait : 暂时不知道

   7. args : 其他的参数 ,暂时不知道

 

二、队列声明方法参数说明

  QueueDeclare(name string, durable, autoDelete, exclusive, noWait bool, args Table) 

  1. 参数 name :队列的名称
  2. 参数 durable : 设置是否持久化。true :队列持计划,持久化的队列会存盘,在服务器重启的时候可以保证不丢失相关信息。
  3. 参数 exclusive : 是否排他。true 表示队列是排他的,如果一个队列被声明排他队列,该队列仅仅对首次声明它的连接可                        见,并在连接断开时候自动删除。
  4. 参数 autoDelete : 设置为自动删除,true 表示队列自动删除。自动删除的前提是:至少有一个消费者连接到这个队列,                     之后所有与这个队列连接的消费者都断开时候,才会自动删除。
  5. 参数 arguments : 设置队列其他一些参数, 如 x-message-ttl、x-expires、x-max-length、x-max-length-bytes、x-dead-letter-exchange 、 x-deadletter-routing-key, x-rnax-priority

注意要点:

  生产者和消费者都能够使用 QueueDeclare 来声明一个队列,但是如果消费者在同一个信道上订阅了另一个队列,就无法在声明队列了。必须将信道设置为”传输“模式,之后才能声明队列。

  

三、绑定 QueueBind 

  队列和交换器绑定

  QueueBind(name, key, exchange string, noWait bool, args Table)

     1、参数 name : 队列名称

     2、参数 key : 用来绑定队列和交换器的路由键

   3、参数 exchange : 交换器名称

四、绑定 exchangeBind 

  交换器与交换器绑定

  ExchangeBind(destination, key, source string, noWait bool, args Table)

    1、参数 destination  目标交换器

    2、参数 key   routing_key

    3、参数 source 源交换器

    

 

五、发送消息

  Publish(exchange, key string, mandatory, immediate bool, msg Publishing)

  1. 参数 exchange ,交换器名
  2. 参数 key,routingkey
  3. 参数 mandatory 
  4. 参数 immediate
  5. 参数 msg 发送的 string 

  

1
2
3
4
5
err = r.channel.Publish(
        r.Exchange,
        "",   // routing key
        false, //
        false,                amqp.Publishing{<br>                ContentType: "text/plain",<br>                Body:        []byte(body),<br>                Expiration: "5000", // 设置五秒的过期时间<br>       }))

  

 

6、消费消息

  Consume(queue, consumer string, autoAck, exclusive, noLocal, noWait bool, args Table)

  参数 queue : 队列的名字  

  参数 consumer:消费者标签,用来区分多个消费者

  参数 autoAck : 设置是否自动确认。建议设成 false ,即不自动确认:

  参数 exclusive :设置是否排他 

  参数 noLocal :设置为 true 则表示不能将同一个 Connection口中生产者发送的消息传送给这个 Connection 中的消费者

  参数  arguments : 设置消费者的其他参数

  

1
2
3
4
5
6
7
8
9
10
11
//消费消息
    messges, err := r.channel.Consume(q.Name, "", false, false, false, false, nil, )
    forever := make(chan bool)
    go func() {
        for d := range messges {
            log.Printf("Received a message: %s", d.Body)
            d.Ack(false)
        }
    }()
    fmt.Println("退出请按 CTRL+C\n")
    <-forever

  

7、持久化

   Rabbitmq 的持久化分为3个部分:交换器的持久化、队列的持久化、消息的持久化

    1、交换器的持久化 是通过在声明队列将 durable 参数设置为 true 实现的。建议为持久化。

    2、队列的持久化 声明队列是将 durable 参数设置为 true 实现

    3、消息持久化 声明发送消息的时候将  DeliveryMode 设置为2

     

 

  注意要点:

    1、建议交换器为持久化

    2、如果单单设置队列持计划:重启之后,消息会丢失 【可以在github 的simple 分支做实验】

    3、如果单单设置消息的持久化,重启之后,队列会小时。

  

8、生成者确认和幂等性

  

 

 

 

 

 

 

 

 

  

posted @   dogRuning  阅读(284)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示