基于交换机二开
如果想对接我们的商城系统,比如场景是在我们商城下了订单后,想要在自己的crm系统记录相关的订单。一般该情况是采用提供创建订单接口的方式,该方式是需要两步,一是在crm提供创建订单的接口,二是在我们商城系统创建订单的时候调用crm提供的创建订单的接口,这种方式在增加开发成本的同时还大大降低了商城的响应速度。
所以采用我们amqp交换机的方式,可以避免这两种情况,开发起来很简单。
原理:rabbitmq的交换机fanout(广播模式),就是把交换机(Exchange)里的消息发送给所有绑定该交换机的队列,忽略routingKey。
实现,在crm系统中创建时间监听方法,如下:
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "ORDER_STATUS_CHANGE_CRM_QUEUE"),
exchange = @Exchange(value = "ORDER_STATUS_CHANGE", type = ExchangeTypes.FANOUT)
))
public void orderChange(GoodsChangeMsg goodsChangeMsg) {
if (events != null) {
for (GoodsChangeEvent event : events) {
try {
event.goodsChange(goodsChangeMsg);
} catch (Exception e) {
logger.error("处理商品变化消息出错", e);
}
}
}
}
注意:
1、@Queue队列中绑定的value不能和我们系统的一样
2、@Exchange的value值要和我们系统的一样
3、监听方法的入参,如上面的GoodsChangeMsg对象,此对象在对接系统中必须完全复用原系统的对象(包名,类名,属性,方法等)