Java使用RabbitMQ(十)--常用操作以及注意事项

为了防止众所周知的身份信息用于生产环境的系统,guest只能用来访问本地。

channel可以主动关闭,但是这不是必须的,在关闭它所依赖的连接时,channel也会自动被关闭。

connection设计为长连接。

有个no wait 版本的队列

channel.queueDeclareNoWait(queueName, true, false, false, null);

这种队列不接收rabbitmq的返回消息。效率更高,但是安全性低。只适合复杂拓扑结构的生产情景。依赖心跳机制发现错误操作。

删除队列

channel.queueDelete("queue-name")

只删除空队列

channel.queueDelete("queue-name", false, true)

只删除不被使用(没有消费者连接)的队列

channel.queueDelete("queue-name", true, false)

清空一个队列

channel.queuePurge("queue-name")

添加消息头

Map<String, Object> headers = new HashMap<String, Object>();
headers.put("latitude",  51.5252949);
headers.put("longitude", -0.0905493);

channel.basicPublish(exchangeName, routingKey,
             new AMQP.BasicProperties.Builder()
               .headers(headers)
               .build()),
               messageBodyBytes);

带过期时间的消息:

channel.basicPublish(exchangeName, routingKey,
             new AMQP.BasicProperties.Builder()
               .expiration("60000")
               .build()),
               messageBodyBytes);

通道和并发注意事项

  • 避免在多个线程中共享通道,而是每个线程一个通道。
  • 通道中的一些操作可以并发执行,一些不行(比如可能会导致二次ack)
  • 为每一个publish创建一个channel也是不可取的,channel被设计为长连接,可以复用,创建太多影响性能。

猜你喜欢

转载自blog.csdn.net/ljz2016/article/details/79992241