gpt4 book ai didi

c++ - 如何确保通过 JMS 成功发送文本消息?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:41 27 4
gpt4 key购买 nike

我已经用 C++ 编写了一个通过 JMS 的短信发送程序。

tibems_status status = TIBEMS_OK;
status = tibemsMsgProducer_SendToDestination(
m_tProducer,
m_tDestination,
m_tMsg );

假设 status == 0,这仅表示 Function 已成功运行。这并不意味着我的短信发送成功如何确保我的消息发送成功?我应该从 JMS 队列中获取 ID 还是确认?

最佳答案

这取决于 Message Delivery Mode .

PERSISTENT消息发送后,tibemsMsgProducer_SendToDestination调用将等待 EMS 服务器回复确认。

NON_PERSISTENT消息发送后,tibemsMsgProducer_SendToDestination调用可能会或可能不会等待确认,具体取决于是否启用了授权以及 npsend_check_mode环境。有关具体详细信息,请参阅 EMS 文档(上面链接)。

最后,当 RELIABLE_DELIVERY消息发送后,tibemsMsgProducer_SendToDestination调用不会等待确认,只有在与 EMS 服务器的连接丢失时才会失败。

但是,即使在发送确认的情况下,这也只是确认 EMS 服务器已收到消息。它不确认消息已被消息使用者接收和处理。 EMS Monitoring Messages可用于确定消息是否已被消费者确认。

消息监控主题的形式为$sys.monitor.<D>.<E>.<destination> , 其中<D>火柴Q|q|T|t , <E>火柴s|r|a|p|\*<destination>是目的地的名称。例如,监视名为 beterman 的队列的消息确认,您的程序将订阅 $sys.monitor.q.a.beterman (或 $sys.monitor.Q.a.beterman 如果您想要已确认消息的拷贝)。

monitoring messages contain many properties ,包括 msg_id , source_nametarget_name .您可以使用该信息将其关联回您发送的消息。

否则,更简单的选择是使用 tibemsMsgRequestor而不是 tibemsMsgProducer . tibemsMsgRequestor_Request将发送消息并等待收件人的回复。在这种情况下,您最好使用 RELIABLE_DELIVERYNO_ACKNOWLEDGE删除生产者与EMS服务器以及EMS服务器与消费者之间的所有确认和确认消息。

但是,如果您确实下了 tibemsMsgRequestor路由,那么您可能还想考虑简单地使用 HTTP 请求,用负载均衡器代替 EMS 服务器。在架构上,这两个选项之间没有太大区别(EMS 使用持久的 TCP 连接,HTTP 不使用)

Producer ->   EMS Server  -> ConsumerA
-> ConsumerB

Client -> Load Balancer -> ServerA
-> ServerB

但是用HTTP you have clear semantics for each of the methods . GET 是 safe (不改变状态),PUT 和 DELETE 是 idempotent (多个相同的请求应该与单个请求具有相同的效果),POST 是非幂等的(每次执行都会导致服务器状态发生变化),等等。你还有 well defined status codes .如果您使用 tibemsMsgRequestor您需要创建定制的语义和响应状态,这将需要额外的努力来创建、维护和培训您团队中的其他开发人员。

此外,找到具有 HTTP 技能的开发人员比找到具有 EMS 技能的开发人员要容易得多,并且找到 HTTP 信息比 EMS 信息要容易得多,因此 tibemsMsgRequestor选项将使招聘更加困难,解决问题更加困难。

因为这个 HTTP 在 IMO 中是一个更好的选择,对于请求-回复或者当你想确保发送的消息被成功处理时。

关于c++ - 如何确保通过 JMS 成功发送文本消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21135269/

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