🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
使用下面的方法发送消息 ~~~java void send(Message message) throws AmqpException; void send(String routingKey, Message message) throws AmqpException; void send(String exchange, String routingKey, Message message) throws AmqpException; ~~~ 我们可以用上面列出的最后一种方法开始我们的讨论,因为它实际上是最明确的。 它允许在运行时提供AMQP Exchange名称以及路由键。 最后一个参数是负责实际创建Message实例的回调。 使用此方法发送消息的示例可能如下所示: ~~~ amqpTemplate.send("marketData.topic", "quotes.nasdaq.FOO", new Message("12.34".getBytes(), someProperties)); ~~~ 如果您计划使用该模板实例在大多数或所有时间发送到同一个交换机,则可以在模板上设置“exchange”属性。 在这种情况下,可以使用上面列出的第二种方法。 以下示例在功能上等同于前一个示例: ~~~ amqpTemplate.setExchange("marketData.topic"); amqpTemplate.send("quotes.nasdaq.FOO", new Message("12.34".getBytes(), someProperties)); ~~~ 更好的思考交换机和路由键属性的方法是显式方法参数将始终覆盖模板的默认值。实际上,即使您没有在模板上显式设置这些属性,也始终存在默认值。在这两种情况下,默认值都是空字符串,但这实际上是一个合理的默认值。就路由密钥而言,首先并不总是必要的(例如扇出交换)。此外,可以使用空String将Queue绑定到Exchange。这些都是依赖于模板的路由键属性的默认空String值的合法方案。就Exchange名称而言,空字符串是非常常用的,因为AMQP规范将“默认Exchange”定义为没有名称。由于所有队列都使用其名称作为绑定值自动绑定到该默认Exchange(即Direct Exchange),因此上述第二种方法可用于通过默认Exchange对任何队列进行简单的点对点消息传递。只需通过在运行时提供method参数,将队列名称作为“routingKey”提供: ~~~ RabbitTemplate template = new RabbitTemplate(); // using default no-name Exchange template.send("queue.helloWorld", new Message("Hello World".getBytes(), someProperties)); ~~~ 或者,如果您希望创建一个用于主要或专门发布到单个队列的模板,则以下内容非常合理: ~~~ RabbitTemplate template = new RabbitTemplate(); //默认交换机,空名 template.setRoutingKey("queue.helloWorld"); //总是发布到此队列 template.send(new Message("Hello World".getBytes(), someProperties)); ~~~