rabbitmq的发布/订阅模式概念

324 阅读1分钟

官网链接: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
)