RabbitMq

channel.queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
* queue: 队列的名称 ;
*. durable: 是否持久化 ;
* 当durable = false时,队列非持久化。因为队列是存放在内存中的,所以当RabbitMQ重启或者服务器重启时该队列就会丢失 ;
* 当durable = true时,队列持久化。当RabbitMQ重启后队列不会丢失。RabbitMQ退出时它会将队列信息保存到 Erlang自带的Mnesia数据库 中,
* 当RabbitMQ重启之后会读取该数据库 ;
* exclusive: 是否排外的 ;
* 当exclusive = true则设置队列为排他的。如果一个队列被声明为排他队列,该队列 仅对首次声明它的连接(Connection)可见,
* 是该Connection私有的,类似于加锁,并在连接断开connection.close()时自动删除 ;
* 当exclusive = false则设置队列为非排他的,此时不同连接(Connection)的管道Channel可以使用该队列 ;
* “首次” 是指如果某个连接(Connection)已经声明了排他队列,其他连接是不允许建立同名的排他队列的。这个与普通队列不同:
* 即使该队列是持久化的(durable = true),一旦连接关闭或者客户端退出,该排他队列都会被自动删除,
* 这种队列适用于一个客户端同时发送和读取消息的应用场景。
* autoDelete: 是否自动删除 ;如果autoDelete = true,当所有消费者都与这个队列断开连接时,这个队列会自动删除。
* 注意: 不是说该队列没有消费者连接时该队列就会自动删除,因为当生产者声明了该队列且没有消费者连接消费时,该队列是不会自动删除的。
*arguments: 设置队列的其他一些参数,如 x-rnessage-ttl 、x-expires 、x-rnax-length 、x-rnax-length-bytes、
* x-dead-letter-exchange、 x-deadletter-routing-key 、 x-rnax-priority 等。

1.String basicConsume(String queue, Consumer callback) throws IOException;
2.String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException;
3.String basicConsume(String queue, boolean autoAck, Map<String, Object> arguments, Consumer callback) throws IOException;
4.String basicConsume(String queue, boolean autoAck, String consumerTag, Consumer callback) throws IOException;
5.String basicConsume(String queue, boolean autoAck, String consumerTag, boolean noLocal, boolean exclusive, Map<String, Object> arguments, Consumer callback) throws IOException
;
queue: 队列的名称
autoAck: 设置是否自动确认, 建议设置成false, 即不自动确认
consumerTag: 消费者标签, 用来区分多个消费者
noLocal: 设置为true, 则表示不能将同一个Connection中生产者发送的消息传递给这个Connection中的消费者
exclusive: 是否排他
arguments: 设置消费者的其他参数
callback: 设置消费者的回调函数, 用来处理rabbitmq推送过来的消息, 比如DefaultConsumer, 使用时需要客户端重写其中的方法

basicPublish(String exchange, String routingKey,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:要发送的信息

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

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

void basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException;
prefetchSize:0
prefetchCount:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该consumer将block掉,直到有消息ack
global:true\false 是否将上面设置应用于channel,简单点说,就是上面限制是channel级别的还是consumer级别
备注:据说prefetchSize 和global这两项,rabbitmq没有实现,暂且不研究

Exchange.DeclareOk exchangeDeclare(String exchange,
String type,
boolean durable,
boolean autoDelete,
boolean internal,
Map<String, Object> arguments) throws IOExceptio

该方法的作用就是:声明交换机
1、exchange,交换机的名字必填项
2、type,交换机类型,必填项
BuiltinExchangeType是一个枚举类型,包括了所有的可能出现的类型,直接写 string效果一致,可选值为:
direct:路由模式(一致性校验)
fanout:发布订阅模式(无需绑定)
topic:topic模式(模糊匹配)
3、durable,是否持久化交换机 false:默认值,不持久化
4、autoDelete,没有消费者使用时,是否自动删除交换机 false:默认值,不删除
5、internal,是否内置,如果设置 为true,则表示是内置的交换器, 客户端程序无法直接发送消息到这个交换器中, 只能通过交换器路由到交换器的方式 false:默认值,允许外部直接访问
一般不设置此项
6、arguments,交换机的一些其他属性,默认值为 null

1.Queue.BindOk queueBind(String queue, String exchange, String routingKey) throws IOException;
2.Queue.BindOk queueBind(String queue, String exchange, String routingKey, Map<String, Object> arguments) throws IOException;
3.void queueBindNoWait(String queue, String exchange, String routingKey, Map<String, Object> arguments) throws IOException;

该方法的作用就是:将队列和交换器绑定
queue: 队列名称
exchange: 交换器的名称
routingKey: 用来绑定队列和交换器的路由键;
argument: 定义绑定的一些参数。
不仅可以将队列和交换器绑定起来,也可以将已经被绑定的队列和交换器进行解绑。具体方法可以参考如下:
1.Queue.UnbindOk queueUnbind(String queue, String exchange, String routingKey) throws IOException;
2.Queue.UnbindOk queueUnbind(String queue, String exchange, String routingKey, Map<String, Object> arguments) throws IOException;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值