官网链接:www.rabbitmq.com/getstarted.…
生产
conn: 与rabbitmq server的socket连接
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672")
channel: 与rabbitmq建立连接后,创建的通道channel,API的操作是基于通道的函数来实现的
ch, err := conn.Channel()
Exchange:消息的真正意义上的接受方,publisher发送的消息都是发送给exchange,默认有个/的exchange。
Queue:缓存队列,实际存储消息的地方。
// 创建一个queue,用于实际缓存消息
q, err := ch.QueueDeclare(
"hello", //name
false, //durable
false, //delete when unused
false, //exclusive
false, //no wait
nil, //arguments
)
消息发送给exchange后,exchange如何知道把消息发送给哪些queue?
通过Binding操作,将queue和exchange通过routing key绑定
ch.QueueBind(
"myqueue", // queue name
"", // routing key
"exchange_name",
)
这个时候routingKey带 "" 的消息将会发送给myqueue。
消费
消费者需要从myqueue消费,同生产进行建立连接、创建channel。
// 进行消费的队列bind
ch.QueueBind(
q.Name, // queue name
"", // routing key
"logs", // exchange
false,
nil
)
msgs, err := ch.Consume(
"myqueue",
"consumerName",
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)