1

ch.QueueDeclare

    queue, err = ch.QueueDeclare(
        "hello", // name 
        false,   // durable 
        false,   // delete when unused
        false,   // exclusive
        false,   // no-wait
        nil,     // arguments
        )
参数名 参数类型 解释
name string 队列名称
durable bool 是否持久化,队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重启之后会读取该数据库
autoDelete bool 是否自动删除队列,当最后一个消费者断开连接之后队列是否自动被删除,可以通过RabbitMQ Management,查看某个队列的消费者数量,当consumers = 0时队列就会自动删除
exclusive bool 是否排外的,有两个作用,
1:当连接关闭时该队列是否会自动删除;
2:该队列是否是私有的private,如果不是排外的,可以使用两个消费者都访问同一个队列,没有任何问题,如果是排外的,会对当前队列加锁,其他通道channel是不能访问的,如果强制访问会报异常;
一般等于true的话用于一个队列只能有一个消费者来消费的场景
no-wait bool 是否等待服务器返回
arguments map[string]interface{} 设置队列的其他一些参数,如 x-rnessage-ttlx-expiresx-rnax-lengthx-rnax-length-bytesx-dead-letter-exchangex-deadletter-routing-keyx-rnax-priority 等。

ch.Publish

ch.Publish(
    "",      // exchange
    "hello", // routing key
    false,   // mandatory
    false,   // immediate
    body,    // msg
) 
参数名 参数类型 解释
exchange string 交换机
routing key string 路由键,#匹配0个或多个单词,*匹配一个单词,在topic exchange做消息转发用
mandatory bool true:如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返还给生产者。
false:出现上述情形broker会直接将消息扔掉
immediate bool true:如果exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者。
msg 消息内容

ch.Consume

ch.Consume(
  "hello", // queue
  "",      // consumer
  true,    // auto-ack
  false,   // exclusive
  false,   // no-local
  false,   // no-wait
  nil,     // args
)
参数名 参数类型 解释
queue string
consumer string
auto-ack bool 是否自动ack,如果不自动ack,需要使用channel.ack、channel.nack、channel.basicReject 进行消息应答
exclusive bool
no-local bool
no-wait bool 是否等待服务器返回
args

ch.ExchangeDeclare

ch.ExchangeDeclare(
   "logs",   // name
   "fanout", // type
   true,     // durable
   false,    // auto-deleted
   false,    // internal
   false,    // no-wait
   nil,      // arguments
)
参数名 参数类型 解释
name string
type string 交换机类型: direct fanout topic headers其中一种
durable bool 是否持久化,durable设置为true表示持久化,反之是非持久化,持久化的可以将交换器存盘,在服务器重启的时候不会丢失信息
auto-deleted bool 是否自动删除,设置为TRUE则表是自动删除,自删除的前提是至少有一个队列或者交换器与这交换器绑定,之后所有与这个交换器绑定的队列或者交换器都与此解绑,一般都设置为fase
internal bool 是否内置,如果设置 为true,则表示是内置的交换器,客户端程序无法直接发送消息到这个交换器中,只能通过交换器路由到交换器的方式
no-wait bool 是否等待服务器返回
arguments 其它一些结构化参数比如alternate-exchange

孤独的根号3
1.8k 声望368 粉丝

提升就是一个不懂到懂的过程;