golang-rabbitmq 客户端参数
一、交换器声明方法参数说明
func (ch *Channel) ExchangeDeclare(name, kind string, durable, autoDelete, internal, noWait bool, args Table) error
- 参数 name : 交换器的名称
- 参数 kind :交换器的类型 【fanout、direct、topic】
- 参数 durable : 设置是否持久化,true :表示持久化。持久化可以将交换器存盘,在服务器重启的时候不会丢失。
- 参数 autoDelete : 设置是否自动删除。true : 表示自动删除,自动删除的前提是至少有一个队列或者交换器与这个交换 器绑定,之后所有与这个交换器绑定的队列或交换器都与这个交换器解绑。注意不能错误把这个参数 理解为:”当与此交换器连接的客户端都断开时候,RabbitMQ 会删除这个交换器“
5. internal : 设置是否是内置的,如果设置为 true , 则表示内置交换器,客户端程序无法直接发送消息到这个交换器中。
6. noWait : 暂时不知道
7. args : 其他的参数 ,暂时不知道
二、队列声明方法参数说明
QueueDeclare(name string, durable, autoDelete, exclusive, noWait bool, args Table)
- 参数 name :队列的名称
- 参数 durable : 设置是否持久化。true :队列持计划,持久化的队列会存盘,在服务器重启的时候可以保证不丢失相关信息。
- 参数 exclusive : 是否排他。true 表示队列是排他的,如果一个队列被声明排他队列,该队列仅仅对首次声明它的连接可 见,并在连接断开时候自动删除。
- 参数 autoDelete : 设置为自动删除,true 表示队列自动删除。自动删除的前提是:至少有一个消费者连接到这个队列, 之后所有与这个队列连接的消费者都断开时候,才会自动删除。
- 参数 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)
- 参数 exchange ,交换器名
- 参数 key,routingkey
- 参数 mandatory
- 参数 immediate
- 参数 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、生成者确认和幂等性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!