我已经通过应用程序配置了我的兔子属性。yaml和spring配置属性。因此,在配置交换、队列和绑定时,可以使用属性的getter
@Bean Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(properties.getQueue());
}
@Bean Queue queue() {
return new Queue(properties.getQueue(), true);
}
@Bean TopicExchange exchange() {
return new TopicExchange(properties.getExchange());
}
然而,当我配置@RabbitListener从队列登录消息时,我必须使用完整的属性名称,如
@RabbitListener(queues = "${some.long.path.to.the.queue.name}")
public void onMessage(
final Message message, final Channel channel) throws Exception {
log.info("receiving message: {}#{}", message, channel);
}
我希望避免这种容易出错的硬编码字符串,并参考configurationProperties bean,如:
@RabbitListener(queues = "${properties.getQueue()}")
我曾经遇到过一个与@EventListener类似的问题,在这里使用bean引用“@bean.method()”很有帮助,但它在这里不起作用,bean表达式只是被解释为队列名称,这会失败,因为队列名称为“@bean….”不存在。
是否可以将ConfigurationProperty bean用于RabbitListener队列配置?
@RabbitListener(queues = "#{myQueue.name}")
通过采纳大卫·迪尔(DavidDiehl)的建议,使用bean和SpEL,我终于能够完成我们都想要做的事情;但是,请改用MyRabbitProperties本身。我删除了config类中的@EnableConfigurationProperties(MyRabbitProperties.class),并以标准方式注册了bean:
@Configuration
//@EnableConfigurationProperties(RabbitProperties.class)
@EnableRabbit
public class RabbitConfig {
//private final MyRabbitProperties myRabbitProperties;
//@Autowired
//public RabbitConfig(MyRabbitProperties myRabbitProperties) {
//this.myRabbitProperties = myRabbitProperties;
//}
@Bean
public TopicExchange myExchange(MyRabbitProperties myRabbitProperties) {
return new TopicExchange(myRabbitProperties.getExchange());
}
@Bean
public Queue myQueueBean(MyRabbitProperties myRabbitProperties) {
return new Queue(myRabbitProperties.getQueue(), true);
}
@Bean
public Binding binding(Queue myQueueBean, TopicExchange myExchange, MyRabbitProperties myRabbitProperties) {
return BindingBuilder.bind(myQueueBean).to(myExchange).with(myRabbitProperties.getRoutingKey());
}
@Bean
public MyRabbitProperties myRabbitProperties() {
return new MyRabbitProperties();
}
}
从那里,您可以访问该字段的get方法:
@Component
public class RabbitQueueListenerClass {
@RabbitListener(queues = "#{myRabbitProperties.getQueue()}")
public void processMessage(Message message) {
}
}
这样的方法对我很有效,我只是用了豆子和豆子。
@Autowired
Queue queue;
@RabbitListener(queues = "#{queue.getName()}")
我有一个关于Spring注释的问题。在我的(学习)项目中,我定义了两个类,另一个类有两个属性,每种类型一个。为了生成一个错误,我在XML中定义了两个相同类类型的beans,并且在setter方法中使用了@Autowired注释。大概是这样的: 在主类中,我获取此 Bean 的应用程序上下文的实例,并打印覆盖 toString 方法的属性的内容,这是一个简单的测试。我已经读到Spring自动连线注释
我知道有可能通过名字得到一个类,使用 是否可以通过名称检索注释?我尝试了这个: 然后将c转换为
我正在使用AmazonSQS&Spring Boot(spring-cloud-aws-messaging)。我已经配置了一个消息侦听器来接收来自带有注释@SQSListener的队列的消息。 这是一个非常简单的方法,但是我没有找到从配置文件加载队列名的方法,因为我有不同的环境。在这方面有什么想法吗?
我当前将我的rabbit listener注释设置为: @RabbitListener(queues=“my queue”) 是否无法从我的yaml文件中提取队列名称。我想这样做的原因是,我可以将队列更改为集成测试的测试队列,只需更改yaml文件中的队列名称即可。看来注释必须接受常量字符串,有什么办法吗?谢谢
目前,我有以下问题:外部RabbitMQ远程服务器需要我首先发送一条异步回复登录消息,然后发送一条广播队列broadcastQueue。MYUSER\u 123由此远程服务器创建。由此,我想通过@RabbitListener注释来使用,这在代码示例中可以看到。但我有一个错误,你可以看到下面。 在调试过程中,我注意到在我的代码中执行登录之前,容器启动了这个监听器,因此在连接这个广播队列时会遭到拒绝。
大家好,我想在将Pojo序列化为json时删除属性名。我有以下课程 SubFieldItems类: 当我序列化时,json输出是 但我希望子字段的值不带属性名,如下所示: 我可以使用什么Jackson注释,我已经尝试过在toString方法中使用@JsonValue来强制执行,就像在评论中一样,但是我一直得到奇怪的结果。请提供任何帮助,谢谢。谢谢