java rabbitmq 绑定_java – Spring rabbitmq用动态绑定发送到交换

我尝试使用TopicExchange来屏蔽消息.

配置:

class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">

零件:

@Component

public class JmsComponent {

private final Logger log = LoggerFactory.getLogger(JmsComponent.class);

private final TopicExchange exchange = new TopicExchange("sample.exchange");

@Autowired

private RabbitTemplate rabbitTemplate;

@Autowired

private Queue queue;

private String received;

public void send(String msg) {

rabbitTemplate.convertAndSend("sample.queue", new SimpleMessage(msg));

}

public void bindToKey(String keyMask) {

BindingBuilder.bind(queue).to(exchange).with(keyMask);

rabbitTemplate.setExchange(exchange.getName());

}

public void sendByKey(String key, String msg) {

rabbitTemplate.convertAndSend(exchange.getName(), key, new SimpleMessage(msg));

}

@RabbitListener(queues = "sample.queue")

public void handle(SimpleMessage message) {

log.info("================ Received " + message.getMsg());

received = message.getMsg();

}

public String getReceived() {

return received;

}

当我使用send(包括TopicExchange之前) – 一切正常.消息直接发送到队列,handle()已收到它.

但对于TopicExchange ….我尝试使用它:

@Test

public void bind() throws InterruptedException {

jmsComponent.bindToKey("qq");

jmsComponent.sendByKey("qq", "message");

Thread.sleep(5000);

Assert.isTrue("message".equals(jmsComponent.getReceived()));

}

测试总是失败但是在日志中我看到了这个 – DEBUG o.s.amqp.rabbit.core.RabbitTemplate – 在交换上发布消息[sample.exchange],routingKey = [qq]

怎么了???

谢谢

解决方法:

这个…

BindingBuilder.bind(queue).to(exchange).with(keyMask);

…除了创建一个Binding对象然后扔掉它之外什么都不做.您需要获取该Binding对象并在admin上调用declareBinding.您还需要申报交换.

由于您的上下文中有管理员;最简单的方法是添加< rabbit:exchange />上下文(连同绑定).见the documentation.

顺便说一句,主题交换用于按关键模式进行路由;如果您只想使用固定密钥路由/绑定,如qq,则使用直接交换.见RabbitMQ Tutorials.

标签:java,spring,rabbitmq,spring-rabbit,rabbitmq-exchange

来源: https://codeday.me/bug/20190528/1167708.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值