Java 关键RabbitMQ方法参数
我试图阅读并理解RabbitMQ Java客户端中的3种基本方法:Java 关键RabbitMQ方法参数,java,rabbitmq,messaging,publish-subscribe,amqp,Java,Rabbitmq,Messaging,Publish Subscribe,Amqp,我试图阅读并理解RabbitMQ Java客户端中的3种基本方法: );及 这些方法有几个神秘的参数,尽管Javadocs确实提供了一些关于它们是什么的解释,但对于这些参数的作用,并不是很清楚: 频道#基本消费 消费者标签-客户端生成的消费者标签,用于建立上下文 noLocal-如果服务器不应向该消费者传递在该频道连接上发布的消息,则为true 独家-如果这是独家消费者,则为真 参数-消费者的一组参数 Channel#basicPublish exchangeName-要将邮件发
- );及
频道#基本消费
- 消费者标签-客户端生成的消费者标签,用于建立上下文
- noLocal-如果服务器不应向该消费者传递在该频道连接上发布的消息,则为true
- 独家-如果这是独家消费者,则为真
- 参数-消费者的一组参数
Channel#basicPublish
- exchangeName-要将邮件发布到的exchange
- 路由密钥-路由密钥
DefaultConsumer#handleDelivery
- 信封-邮件的打包数据
一些厌战的RabbitMQ老手能帮助像我这样的新手理解这7个方法参数,以及它们的用途吗?Javadoc的解释还不够清楚。例如:“参数-消费者的一组参数”。什么?!?!或者:“独家-如果这是独家消费者,则为真”…那么什么是独家消费者?!?!等等,提前谢谢 要全面了解RabbitMQ的实现,您可能需要阅读AMQP协议规范和参考。一般而言,无论使用何种语言,规范都应解释所有参数 下面的链接解释了 独家: 独占队列只能由当前连接访问,并在该连接关闭时删除。不允许其他连接被动声明独占队列。 服务器必须同时支持独占(专用)和非独占(共享)队列。 客户端不能尝试使用被另一个仍然打开的连接声明为独占的队列。错误代码:资源已锁定 客户标签: 指定使用者的标识符。消费者标签是频道的本地标签,因此两个客户端可以使用相同的消费者标签。如果此字段为空,服务器将生成一个唯一的标记。 客户端不能指定引用现有使用者的标记。错误代码:不允许 消费者标签仅在创建消费者的渠道内有效。即,客户不得在一个渠道中创建消费者,然后在另一个渠道中使用。错误代码:不允许 AMQP扩展以了解其他参数(Map) 示例-TTL: 每队列消息TTL queue.declare的x-message-ttl参数控制发布到队列的消息在被丢弃之前的生存时间。在队列中的时间超过配置的TTL的消息称为已死亡。请注意,路由到多个队列的消息可能在其所在的每个队列中的不同时间死亡,或者根本不死亡。一个队列中消息的死亡不会影响其他队列中同一消息的寿命 服务器保证死消息不会包含在任何basic.get-ok或basic.deliver方法中。此外,服务器将尝试在基于TTL的到期时或之后不久获取消息
x-message-ttl参数的值必须是非负32位整数(0以下两个链接:- Java创建了一个队列,其中消息最多可以驻留60秒:
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);
byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties();
properties.setExpiration("60000");
channel.basicPublish("my-exchange", "routing-key", properties, messageBodyBytes);
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);
Map args=newhashmap();
参数put(“x-message-ttl”,60000);
queueDeclare(“myqueue”,false,false,false,args);
就独家而言,这意味着只允许一名消费者加入队列。谢谢@sovanesyan(+1)-我可以问一下你是怎么知道的,或者你能给我指什么文档吗?如果该文档解释了独占的
,它可能也解释了我需要的这些其他字段。再次感谢!如果你知道任何其他字段,请不要害羞!你看过教程了吗,它们有很多示例代码供你参考。谢谢@robthewolf(+1)-是的,我已经阅读了所有的教程,这些字段没有显示在任何地方!感谢您的回答@Mouli(+1)-但是它没有提到noLocal
,exchangeName
,routingKey
和envelope
。尽管它提到了一个可能的参数
(x-message-ttl
)它没有提到任何其他属性(我相信还有很多)。如果您能提供所有这些其他属性的EXLPANTIONS,也许可以给我一个指向所有可能的参数的链接(除了x-message-ttl),我很乐意为您提供绿色支票和奖金!对于exchange名称和路由密钥,请检查这是一个很好的示例。