使用WebSphere MQ的客户端服务器
Client server using WebSphere MQ
我在客户端服务器应用程序的两个选项之间选择-
首先-采用TCP/IP(纯套接字)方法,使用多线程服务器,并自己管理发送和接收的同步。
二次使用和WebSphere MQ方法(MQI)。基本上,服务器有一个输入队列和一个输出队列。客户端写入服务器输入队列,服务器将回复放入带有相关标识符等的输出队列中。所以只需要2个队列。服务器程序是多线程的(线程池),多个线程在输入队列上读,在输出队列上写。问题-我倾向于第二种方法,但没有什么疑问-
MQI调用线程安全吗?我必须为
MQGET
和MQPUT
使用一些互斥吗?基于MQ的方法的性能是否会低于基于套接字的方法。我说的性能是指两件事。
。IBM MQ队列操作通常比直接套接字连接慢吗?
b。
MQGET
和MQPUT
的互斥锁是否会减慢消息的处理速度?c。我计划每秒加载大约10000条消息(每条消息大约100字节)。回复大约为5 KB (XML消息)。这是基于IBM MQ的方法的实际负载吗?
说明—语言为c++,服务器操作系统为Solaris
您所描述的用例非常狭窄。这绝不仅仅是"套接字还是队列"的问题,业务案例中必须考虑其他因素:
- 物品将如何被监控和管理?是否有必要编写所有向NOC报告系统运行状况并提供消息统计信息的部分,或者我可以使用MQ提供的部分? 我需要排队还是这真的是一个同步应用程序?
- 这真的是点对点吗?还是涉及到的应用程序参与了一个服务和上下游连接的生态系统?它还需要和什么积分?
- 是否需要消息充实、路由、扇入、扇出、发布/订阅或其他功能?编写代码或使用WMQ/WMQ Broker本地特性?
- 连接需要认证吗?加密?编写代码或使用WMQ本地特性?
- 是否涉及法规遵从性因素,如果有,审核自定义代码与COTS运输的成本是多少?
- 开发团队是否有深厚的c++技能,并准备在代码的生命周期内保持这种深度的基础?
- 如何管理连接配置,它是否无缝地支持HA和DR ?编写代码或使用WMQ本地特性?
- 异常逻辑和自动重连如何管理?编写代码或使用WMQ本地特性?
业务案例必须考虑比原始速度更多的东西。当两个备选方案都能够满足吞吐量需求时尤其如此,就像这里的情况一样。一旦功能需求得到满足,就必须在业务用例中考虑所有这些其他方面(以及更多我还没有想到的方面)。
关于具体问题……
以您希望的方式管理对队列的访问。多个线程竞争相同的消息,但是传递给一个线程的消息不会传递给另一个线程。例外情况是,如果消息被回滚并再次可用,或者应用程序正在使用pub/sub并有意接收多个消息副本。
在应用端,会话中的调用是线程安全的。所以所有的线程一起使用同一个会话COMMIT
。通常一对使用请求/应答的线程协同工作。否则,每个线程一个会话就可以满足您的需要。
至于性能,这是一个苹果与橙子的比较。问题在于,一个c++套接字程序提供了异步消息传输的所有服务、诊断、弹性和其他特性,它的性能是否能与异步消息传输相提并论。答案通常是否定的。WMQ已经优化了20年,只做一件事,而且做得非常好。一个新的自定义c++套接字程序将更快地移动数据,但不提供相同的功能。因此,这归结为应用程序是否需要如此少的WMQ功能,从长远来看,自定义代码所需的几个功能更便宜,然后在应用程序的生命周期中保持它。同样,答案通常是否定的。
有关消息吞吐量的详细信息,请转到SupportPacs页面,并根据您需要的平台和版本查找名称以MP__开头的那些。即使在一般的硬件上,也可以为小消息实现10k MPS。
- "unknown ca"自生成的 CA、证书和客户端/服务器
- Java 客户端C++服务器数据发送/接收问题
- ZMQ - 客户端服务器:客户端意外关闭,服务器如何检测到?
- 用于本地网络运行的客户端服务器体系结构
- TCP套接字(客户端-服务器)recv()返回-1值
- C++启动另一个程序(客户端-服务器)的程序
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- 为什么在此 UDP 客户端/服务器示例中没有必要绑定客户端套接字?
- TCP在客户端服务器之间传输时,数据是否有任何限制
- 是否可以添加多个服务器地址?(Asio,客户端>服务器)
- 通过TCP在客户端/ C#服务器之间传输文件C++
- TCP 客户端服务器程序
- 客户端服务器回声程序进入UDP的僵局
- 如何制作具有同步数据读/写功能的多客户端服务器
- Qt,客户端-服务器关系
- Winsock 简单客户端服务器,接收失败
- 在C++中对客户端/服务器应用进行单元测试
- 在客户端/服务器计算器C 方面遇到麻烦
- 客户端服务器简单示例非块