是否可以用 RabbitListener 声明这些绑定?
is it possible to declare these bindings with RabbitListener?
给定此代码
@Bean
open fun exchange(): TopicExchange {
return TopicExchange("amq.topic")
}
@RabbitListener(queues = [Amqp.BODY_WEIGHT_NEW])
open fun record(entity: Collection<BodyWeight>) {
log.trace("saving: {}", entity)
}
@Bean
open fun weight(): Queue {
return Queue(Amqp.BODY_WEIGHT_NEW)
}
@Bean
open fun bindWeight(): Binding {
return BindingBuilder.bind(weight()).to(exchange).with(Amqp.BODY_WEIGHT_NEW)
}
是否可以使用 @RabbitListener
减少我的@Bean 声明?我知道我可以将队列列为要声明的队列,但我不确定绑定会是什么样子。
试过这个
@RabbitListener(bindings = [QueueBinding(value = Queue(Amqp.BODY_WEIGHT_NEW), exchange = Exchange("amqp.topic"))])
但它似乎没有以同样的方式绑定到交易所,因为我的测试没有通过。
您需要将路由键添加到 @QueueBinding
...
key = Amqp.BODY_WEIGHT_NEW
(这就是 BindingBuilder
上的 with
子句的作用)。
编辑
适合我...
@SpringBootApplication
open class So55928905Application {
@RabbitListener(bindings = [QueueBinding(value = Queue("foo"),
exchange = Exchange("amqp.topic"),
key = ["foo"])])
fun `in`(`in`: String) {
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
SpringApplication.run(So55928905Application::class.java, *args)
}
}
}
EDIT2
问题是您的交易所名称 MQTT 发布到标准 amq.topic
而不是 amqp.topic
。
@SpringBootApplication
open class So55928905Application {
@RabbitListener(bindings = [QueueBinding(value = Queue("foo"),
exchange = Exchange(name = "amq.topic", type = "topic"),
key = ["foo"])])
fun listen(string: String) {
println(string)
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
SpringApplication.run(So55928905Application::class.java, *args)
}
}
}
给定此代码
@Bean
open fun exchange(): TopicExchange {
return TopicExchange("amq.topic")
}
@RabbitListener(queues = [Amqp.BODY_WEIGHT_NEW])
open fun record(entity: Collection<BodyWeight>) {
log.trace("saving: {}", entity)
}
@Bean
open fun weight(): Queue {
return Queue(Amqp.BODY_WEIGHT_NEW)
}
@Bean
open fun bindWeight(): Binding {
return BindingBuilder.bind(weight()).to(exchange).with(Amqp.BODY_WEIGHT_NEW)
}
是否可以使用 @RabbitListener
减少我的@Bean 声明?我知道我可以将队列列为要声明的队列,但我不确定绑定会是什么样子。
试过这个
@RabbitListener(bindings = [QueueBinding(value = Queue(Amqp.BODY_WEIGHT_NEW), exchange = Exchange("amqp.topic"))])
但它似乎没有以同样的方式绑定到交易所,因为我的测试没有通过。
您需要将路由键添加到 @QueueBinding
...
key = Amqp.BODY_WEIGHT_NEW
(这就是 BindingBuilder
上的 with
子句的作用)。
编辑
适合我...
@SpringBootApplication
open class So55928905Application {
@RabbitListener(bindings = [QueueBinding(value = Queue("foo"),
exchange = Exchange("amqp.topic"),
key = ["foo"])])
fun `in`(`in`: String) {
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
SpringApplication.run(So55928905Application::class.java, *args)
}
}
}
EDIT2
问题是您的交易所名称 MQTT 发布到标准 amq.topic
而不是 amqp.topic
。
@SpringBootApplication
open class So55928905Application {
@RabbitListener(bindings = [QueueBinding(value = Queue("foo"),
exchange = Exchange(name = "amq.topic", type = "topic"),
key = ["foo"])])
fun listen(string: String) {
println(string)
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
SpringApplication.run(So55928905Application::class.java, *args)
}
}
}