rabbit channel参数

Posted 付出才有回报,敢于尝试才能成功。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbit channel参数相关的知识,希望对你有一定的参考价值。

channel.exchangeDeclare()

channel.ExchangeDeclare(string exchange: "cjlTest",string  type: "direct/topic/header/fanout",bool  durable: true);

参数解析:

exchange:名称

type:有direct、fanout、topic三种;选择合适自己的

durable:是否开启持久化exchange

autoDelete: 当已经没有消费者时,服务器是否可以删除该exchange

 

chanel.basicQos()

channel.basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException;

参数解析:

  prefetchSize:消息的大小

  prefetchCount:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该consumer将block掉,直到有消息ack

  global:是否将上面设置应用于channel,简单点说,就是上面限制是channel级别的还是consumer级别

channel.basicPublish()

void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body)
            throws IOException;
参数解析:
  exchange:名称
  routingKey:路由键,#匹配0个或多个单词,*匹配一个单词,在topic exchange做消息转发用
  mandatory:为true时如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返还给生产者。
          为false时出现上述情形broker会直接将消息扔掉
  immediate:为true时如果exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者。
  props:需要注意的是BasicProperties.deliveryMode,1:不持久化 2:持久化 这里指的是消息的持久化,配合channel(durable=true),queue(durable)可以实现,即使服务器宕机,消息仍然保留
  body:要发送的信息

channel.basicAck()

void basicAck(long deliveryTag, boolean multiple) throws IOException;
参数解析
  deliveryTag:该消息的index
  multiple:是否批量处理.true:将一次性ack所有小于deliveryTag的消息。

channel.basicNack()

void basicNack(long deliveryTag, boolean multiple, boolean requeue)
            throws IOException;
参数解析
deliveryTag:该消息的index
multiple:是否批量.true:将一次性拒绝所有小于deliveryTag的消息。
requeue:被拒绝的是否重新入队列

channel.basicReject()

void basicReject(long deliveryTag, boolean requeue) throws IOException;
参数解析
deliveryTag:该消息的index
requeue:被拒绝的是否重新入队列
channel.basicNack 与 channel.basicReject 的区别在于basicNack可以拒绝多条消息,而basicReject一次只能拒绝一条消息

channel.basicConsume() 

String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException;

参数解析
queue:队列名称
autoAck:
是否自动ack,如果不自动ack,需要使用channel.ack、channel.nack、channel.basicReject 进行消息应答callback:回调函数,一个事件

chanel.exchangeBind()

用于通过绑定bindingkey讲queue到exchange,之后便可以进行消息接收

Exchange.BindOk exchangeBind(String destination, String source, String routingKey) throws IOException;

channel.queueDeclare()

Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                 Map<String, Object> arguments) throws IOException;
durable:true、false true:在服务器重启时,能够存活
exclusive :是否为当前连接的专用队列,在连接断开后,会自动删除该队列,生产环境中应该很少用到吧。
autodelete:当没有任何消费者使用时,自动删除该队列
 

 

以上是关于rabbit channel参数的主要内容,如果未能解决你的问题,请参考以下文章

python rabbit MQ

rabbit工作队列模式

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

rabbit mq 手动重试机制

HDU4057 Rescue the Rabbit(AC自动机+状压DP)

golang 片段7 for https://medium.com/@francesc/why-are-there-nil-channels-in-go-9877cc0b2308