gpt4 book ai didi

c++ - 使用 WebSphere MQ 的客户端服务器

转载 作者:太空狗 更新时间:2023-10-29 21:24:44 30 4
gpt4 key购买 nike

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

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

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

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

  1. MQI 调用线程安全吗?我是否必须对队列的 MQGETMQPUT 使用一些互斥。

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

    一个。一般而言,IBM MQ 队列操作是否比直接套接字连接慢?

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

    我计划每秒加载大约 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 原生功能?

商业案例必须考虑的不仅仅是原始速度。当两种备选方案都能够满足吞吐量要求时,尤其如此。一旦满足功能要求,就必须在业务案例中考虑所有这些其他方面(还有更多我没有想到的)。

至于具体问题...

对队列的访问按照您希望的方式进行管理。多个线程竞争相同的消息,但传递给一个线程的消息不会传递给另一个线程。异常(exception)情况是消息被回滚并再次可用,或者应用正在使用发布/订阅并有意接收消息的多个拷贝。

在应用端,调用在 session 中是线程安全的。所以所有线程一起使用同一个 session COMMIT。通常一对使用请求/回复的线程协同操作。否则,每个线程一个 session 即可满足您的需求。

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

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

关于c++ - 使用 WebSphere MQ 的客户端服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362302/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com