MQ消息队列应用

很荣幸,原来一直听说的消息队列终于在前段时间用到了自己的项目中。为什么会用到消息队列?毫无疑问,当然是传输消息。

这里消息一般是一串字符串,当然,消息的含义很多,可以是“hello world”,可以是“你吃饭了吗?”,可以是一串正式的XML报文。

也可以是一个TXT文件或者xml文件(在用Active MQ的时候可以直接传输文件,Active MQ自带传输服务,有自己的传输目录,传输的格式为BlogMessage)。


废话不多说,先描述下业务场景:

我们的系统A要跟另一个系统B(这个系统有消息队列B)之间互相传输数据,利用消息队列C中转,我们每天会向C队列发出消息,他们接收数据然后给B队列(交易量可能会比较大);B队列再将返回的消息给C队列,再回到我们的系统。

当然,前面的博文中说到了传输消息的方式有很多,WebService方式,两个系统Esb用不到了,

而且业务场景比较简单,主要就是为了满足高并发的情况下,两个系统之间能够正常并且准确通信的问题。所以用到了消息队列。


这里用的是IBM的IBM WebSphere MQ,IBM的概念和基础用法大家可以参考《IBM MQ入门参考手册》的一个PDF文档,应该很容易找到。

大致流程如下:

应用程序与队列管理器连接。它通过 MQConnect 来进行此连接。下一步调用 MQOpen 为输出打开一个队列。

然后应用程序调用MQPut 将其数据放到队列上。要接收数据,应用程序调用 MQOpen 打开输入队列。应用程序调用MQGet 从队列上接收数据。 

本地的报文消息以流的方式传输到队列C,C再给B,B再给C,然后A系统接收C返回的消息。


实现过程一个注意的地方:发送消息时,定义一个Message_id,对方会将你的message_id处理一下,应该是复制到correlation_id中,然后收消息时,一定将correlation_id再复制到message_id,这样可以确保高并发情况下你发出去的消息能收到对应的返回消息。不然的话高并发情况你发的A报文不一定能拿到A_back.xml。

题外话:

在平时的开发中,我认为正确的思路很重要,需求来了,一定要先分析,最好是纸笔在纸上写一写,把要做的功能弄清楚,

思想很重要,一定是先构思。上次写的那个跟ESB联调的,我收到的需求是提供一个WebService服务,让别人查我们的库然后

把数据送给他们,我已经写好了接口代码都上测试环境了,结果说是有ESB中转这么一回事,而且第三方系统跟我们系统报文的格式

都不一致。最后我才明白其实就是ESB跟我交互,我不管第三方系统,我接受的是一个HttpRequest(ESB用HttpRequest请求我的),

所以我直接在本地写好一个Servlet接受访问就行了。


开发中最难的一定不是写代码。设计很重要。各位,晚安。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值