如何解决是否可以使用Java中的RabbitMQ从配置创建多个队列和交换?
我有一个配置:
rand_df <- data.frame(replicate(10,sample(0:10,200,rep=TRUE))) # random df
names(rand_df) <- letters[seq(from=1,to=10)] #renaming header
rand_df$c[2:20] <- NA # introducing NAs
head(rand_df)
a b c d e f g h i j
1 3 1 8 2 4 3 1 9 2 9
2 6 1 NA 1 2 8 8 6 0 9
3 5 7 NA 2 4 1 7 7 3 0
4 10 8 NA 6 6 7 0 2 2 0
5 4 1 NA 9 3 8 2 2 5 2
6 10 8 NA 3 10 2 10 4 5 5
对于上述配置,我想动态创建交换和队列。
我已经尝试过了,但是没有创建任何交换或队列。
rand_df <- rand_df %>% mutate(k = 141 * min((c/88.42),1))
head(rand_df):
a b c d e f g h i j k
1 3 1 8 2 4 3 1 9 2 9 NA
2 6 1 NA 1 2 8 8 6 0 9 NA
3 5 7 NA 2 4 1 7 7 3 0 NA
4 10 8 NA 6 6 7 0 2 2 0 NA
5 4 1 NA 9 3 8 2 2 5 2 NA
6 10 8 NA 3 10 2 10 4 5 5 NA
是否可以从config中动态创建队列和交换,还是我需要为每个条目分别声明Exchange,Queue和Binding @Bean?
解决方法
无法从本地配置中完全声明Declarable
,Exchange
和Queue
之类的对象。
您最能做的就是使用Binding
:
Declarables
完全用Java代码在RabbitMQ上声明您的AMQP对象。但是您仍然需要从配置中获取@Bean
public Declarables declarables() {
return new Declarables(
new DirectExchange("exchangeName",false,true),new Queue("queueName",new Binding("destination",DestinationType.QUEUE,"exchange","routingKey",null));
}
,"queueName"
等。因此,我建议创建如下的帮助器类:
"exchangeName"
因此,无需更改代码,只需修改配置中的@Configuration
public QueueHelper {
@Value("my.queue.names") private List<String> queueNames;
@Bean
public Declarables queueDeclarable() {
Declarables declarables = new Declarables();
declarables.addAll(queueNames.stream().map(queueName -> new Queue(queueName,true)).collect(Collectors.toList());
return declarables;
}
}
,即可通过配置动态定义队列。
因此,如果您有my.queue.names
,您将得到两个队列。 my.queue.names=queue1,queue1
和queue1
,但是如果您拥有queue2
,则会得到三个分别名为my.queue.names=queue1,queue2,queue3
,queue1
和queue2
的队列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。