Java 关键RabbitMQ方法参数

Java 关键RabbitMQ方法参数,java,rabbitmq,messaging,publish-subscribe,amqp,Java,Rabbitmq,Messaging,Publish Subscribe,Amqp,我试图阅读并理解RabbitMQ Java客户端中的3种基本方法: );及 这些方法有几个神秘的参数,尽管Javadocs确实提供了一些关于它们是什么的解释,但对于这些参数的作用,并不是很清楚: 频道#基本消费 消费者标签-客户端生成的消费者标签,用于建立上下文 noLocal-如果服务器不应向该消费者传递在该频道连接上发布的消息,则为true 独家-如果这是独家消费者,则为真 参数-消费者的一组参数 Channel#basicPublish exchangeName-要将邮件发

我试图阅读并理解RabbitMQ Java客户端中的3种基本方法:

  • );及
这些方法有几个神秘的参数,尽管Javadocs确实提供了一些关于它们是什么的解释,但对于这些参数的作用,并不是很清楚:

  • 频道#基本消费
    • 消费者标签-客户端生成的消费者标签,用于建立上下文
    • noLocal-如果服务器不应向该消费者传递在该频道连接上发布的消息,则为true
    • 独家-如果这是独家消费者,则为真
    • 参数-消费者的一组参数
  • Channel#basicPublish
    • exchangeName-要将邮件发布到的exchange
    • 路由密钥-路由密钥
  • DefaultConsumer#handleDelivery
    • 信封-邮件的打包数据
这些方法,以及正确使用它们,对于以最简单的形式使用RabbitMQ(向队列和从队列发送消息的基本发布和使用)至关重要。在我理解这些参数是什么以及它们在服务器端意味着什么/做了什么之前,我一直无法确定如何继续使用库


一些厌战的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名称和路由密钥,请检查这是一个很好的示例。