使用WebSphere MQ的客户端服务器

Client server using WebSphere MQ

本文关键字:客户端 服务器 MQ WebSphere 使用      更新时间:2023-10-16

我在客户端服务器应用程序的两个选项之间选择-

首先-采用TCP/IP(纯套接字)方法,使用多线程服务器,并自己管理发送和接收的同步。

二次使用和WebSphere MQ方法(MQI)。基本上,服务器有一个输入队列和一个输出队列。客户端写入服务器输入队列,服务器将回复放入带有相关标识符等的输出队列中。所以只需要2个队列。服务器程序是多线程的(线程池),多个线程在输入队列上读,在输出队列上写。

问题-我倾向于第二种方法,但没有什么疑问-

  1. MQI调用线程安全吗?我必须为MQGETMQPUT使用一些互斥吗?

  2. 基于MQ的方法的性能是否会低于基于套接字的方法。我说的性能是指两件事。

    。IBM MQ队列操作通常比直接套接字连接慢吗?

    b。MQGETMQPUT的互斥锁是否会减慢消息的处理速度?

    c。我计划每秒加载大约10000条消息(每条消息大约100字节)。回复大约为5 KB (XML消息)。这是基于IBM MQ的方法的实际负载吗?

说明—语言为c++,服务器操作系统为Solaris

您所描述的用例非常狭窄。这绝不仅仅是"套接字还是队列"的问题,业务案例中必须考虑其他因素:

  1. 物品将如何被监控和管理?是否有必要编写所有向NOC报告系统运行状况并提供消息统计信息的部分,或者我可以使用MQ提供的部分?
  2. 我需要排队还是这真的是一个同步应用程序?
  3. 这真的是点对点吗?还是涉及到的应用程序参与了一个服务和上下游连接的生态系统?它还需要和什么积分?
  4. 是否需要消息充实、路由、扇入、扇出、发布/订阅或其他功能?编写代码或使用WMQ/WMQ Broker本地特性?
  5. 连接需要认证吗?加密?编写代码或使用WMQ本地特性?
  6. 是否涉及法规遵从性因素,如果有,审核自定义代码与COTS运输的成本是多少?
  7. 开发团队是否有深厚的c++技能,并准备在代码的生命周期内保持这种深度的基础?
  8. 如何管理连接配置,它是否无缝地支持HA和DR ?编写代码或使用WMQ本地特性?
  9. 异常逻辑和自动重连如何管理?编写代码或使用WMQ本地特性?

业务案例必须考虑比原始速度更多的东西。当两个备选方案都能够满足吞吐量需求时尤其如此,就像这里的情况一样。一旦功能需求得到满足,就必须在业务用例中考虑所有这些其他方面(以及更多我还没有想到的方面)。

关于具体问题……

以您希望的方式管理对队列的访问。多个线程竞争相同的消息,但是传递给一个线程的消息不会传递给另一个线程。例外情况是,如果消息被回滚并再次可用,或者应用程序正在使用pub/sub并有意接收多个消息副本。

在应用端,会话中的调用是线程安全的。所以所有的线程一起使用同一个会话COMMIT。通常一对使用请求/应答的线程协同工作。否则,每个线程一个会话就可以满足您的需要。

至于性能,这是一个苹果与橙子的比较。问题在于,一个c++套接字程序提供了异步消息传输的所有服务、诊断、弹性和其他特性,它的性能是否能与异步消息传输相提并论。答案通常是否定的。WMQ已经优化了20年,只做一件事,而且做得非常好。一个新的自定义c++套接字程序将更快地移动数据,但不提供相同的功能。因此,这归结为应用程序是否需要如此少的WMQ功能,从长远来看,自定义代码所需的几个功能更便宜,然后在应用程序的生命周期中保持它。同样,答案通常是否定的。

有关消息吞吐量的详细信息,请转到SupportPacs页面,并根据您需要的平台和版本查找名称以MP__开头的那些。即使在一般的硬件上,也可以为小消息实现10k MPS。