问题标签 [xms]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如果连接未重新启动,MessageListener 只会读取一条消息
我在阅读 IBM MQ (c# + IBM.XMS + ibmcom/mq:latest) 上的第二条消息时遇到问题。使用默认队列“DEV.QUEUE.1”,只有在第一条消息到达后连接停止并重新启动(conn.Stop()/conn.Start())时,它才会继续侦听消息。如果在侦听器运行时消息已经在队列中,则所有消息都被立即消费。
我正在使用 Docker,这是 MQ 版本信息:(已尝试多个旧版本)
使用的代码:
谢谢
.net - 在 IIS 10 托管的 .net 应用程序中运行时出现 Apache.NMS.XML 错误。原因:2381
我最近将我们的应用程序迁移到了运行 IIS 10(以前的 IIS 7.5 版本)的新服务器上。现在我的 api Web 应用程序无法通过 apache NMS.XML 包连接到我们的 IBM MQ 队列管理器(CompCode:2,Reason:2381,IBM.XMS.XMSException:CWSMQ0006E)。
我尝试在控制台应用程序(相同的 .net 版本、服务器、域和用户)中运行代码,在这种情况下它运行良好。它仅在我们的 IIS 托管 Web 应用程序上失败。
以下是由于 Web 应用程序无法连接到队列管理器而导致的错误。
来自 MQ 客户端的错误:
来自 Apache.NMS.XML 包的错误:
c# - IBM MQ .net XMS 读取字节消息时出错,字节长度错误
我有一个用于获取 IBM mq 消息的 C# 客户端。我正在尝试从队列中读取字节消息。但我收到以下错误。
IBM.XMS.MessageEOFException: CWSMQ0136I: 尝试读取超出消息末尾的内容。已尝试阅读超出消息末尾的内容。如果应用程序已被编码为使用 JMS 1.0.2 规范读取可变长度数据,这可能是正常情况。如有必要,重新编码应用程序以使用新的 getBodyLength 方法。在 IBM.XMS.Client.Impl.XmsBytesMessageImpl.ReadUTF()
我在 C# 中尝试了以下代码,
该错误表明我在我见过的 java 中使用 getBodyLength()
但是我如何在 C# 中做到这一点。我看到它的 GetBodyLength 不可用?
c# - IBM XMS .Net 如何从 MQ 接收 png 和 jpg 等图像文件
我有一个 .net XMS 客户端来接收来自 MQ 的消息。它可以很好地接收文本文件。但是当我尝试接收 .zip 或 png 文件时,问题就开始了。问题是保存的文件已损坏并且总是将其解释为文本消息。
msg.Text删除字符。
我在记事本++中打开了原始的png文件并找到了字符,例如下面
我还尝试复制文本并将文本粘贴到新文件中会损坏文件。我错过了什么...被翻译成
无论如何都要用缺少的字符来阅读它
transactions - IBM XMS:CommittableTransaction() 与会话事务,它们中的任何一个都是全局的吗?
我正在使用事务来读取和确认 IBM 队列上的消息,我想知道当多个消费者实例从同一个队列中读取时,创建的会话是否会全局connection.CreateSession(true, AcknowledgeMode.SessionTransacted)
锁定消息?
背景:我编写了一个小型 .NET Core 后台服务,它使用 IBM XMS 获取队列的消息。此服务的实例将托管在两个不同的服务器上(负载平衡),每个服务将连接到同一个队列。我担心的是,由于不同服务器上的两个不同消费者正在从同一个队列中读取,他们可能会尝试使用相同的消息。
我最近遇到了SimpleXAConsumer示例,其中使用了CommittableTransaction()对象而不是会话事务。该文件指出:
“当使用 XA 事务时,事务控制是通过分布式事务协调器 (DTC)全局事务进行的,而不是通过 XMS 会话。”
...这让我相信 XMS 会话事务不是全局的,除非使用 CommittableTransaction() 对象。
如果有人可以确认,那就太好了:
- 如果必须使用 CommittableTransaction() 来创建全局事务。
- 如果一个全局事务锁定了一条消息,以便没有其他消费者可以使用它。
multithreading - IBM XMS:会话范围多线程安全吗?
运行多线程时会话范围是否安全?我有一个单例服务(多线程),它的方法如下所示:
在我看来,每次调用该方法都会创建自己的会话范围,该会话范围彼此并行运行。
另一方面,如果两个线程彼此靠近运行,那么当创建一个会话时,另一个会话将在该会话内创建。
这种方法多线程“安全”吗?或者我需要在这种情况下使用锁吗?
websphere - IBM MQ Internet Pass-Thru 许可要求
我们在我们的组织内配置了一个 IBM MQ Internet Pass-Thru V2.1.0.1(MQIPT),它使用外部组织“X”发布的消息。外部组织“X”已分发此 MQIPT 以在我们的场所内使用。我们正在尝试通过托管在我们场所的 MQIPT 将“X”发布的消息使用到托管在他们身边的 IBM MQ(完全许可)。
我们已使用 .NET 库“XMS.Net”(https://www.ibm.com/support/pages/xms-net-%E2%80%93-overview)通过 MQIPT 使用消息。许可上说它在 90 天内是免费的。
在此配置中,使用 XMS.NET IBM C# 库需要什么许可要求?
谁能告诉我,除了“X”已经拥有的许可证之外,我们是否还需要购买任何许可证?如果是的话,通常需要多少钱?我正在尝试从 IBM 获得帮助,但考虑到他们的优先级,我希望我能从这里得到更快的答案。
transactions - MQ:如果消息回滚失败会发生什么?
我使用 IBM.XMS (9.1.0.0) 从我的 .NET 应用程序的队列中获取消息。在会话下,我从队列中获取消息然后插入数据库(SQL 服务器),如果一个步骤失败,会话将回滚。该消息将返回到队列中,以便我下次可以得到它。这工作正常,直到有一天,一条消息丢失并且 MQ 日志说:
IBM.XMS.XMSException: CWSMQ0067E: 回滚失败。对底层队列管理器对象的 Backout() 操作失败。
链接异常:CompCode:2,原因:2018
我不确定这个错误是否是原因,所以我的问题是:如果出现“回滚失败”异常会发生什么,消息是否会返回队列?
c# - IBM XMS Receive 方法不立即返回消息
我使用 IBM XMS 连接到第三方以发送和接收消息。
更新:
- 客户端.Net Core 3.1
- 来自 Nuget 的 IBM XMS 库版本。尝试了 9.2.4 和 9.1.5,结果相同
- 一周前使用相同的代码可以正常工作 - 所以 MQ 管理器或我的基础架构中的某个地方一定发生了变化
- SSL 和客户端证书
我一直在使用超时接收没有问题,但从上周开始,我开始看不到任何要选择的消息 - 即使它们在那里 - 但是一旦我更改为非超时接收方法,我再次开始每5分钟。
查看 XMS 日志,我可以看到消息实际上几乎立即被读取,有无超时,但 XMS 似乎决定在返回消息之前等待这 5 分钟......
我没有改变我的任何东西,第三方向他们保证他们也没有。
我的问题是:鉴于以下用于接收的代码,是否有任何可能导致 5 分钟等待的原因?关于我可以尝试的事情有什么想法吗?如果有帮助,我也可以分享 XMS 日志。
c# - IBM MQ XMS.NET IBM.XMS.IllegalStateException:CWSMQ0076E
我在向生产者发送一些消息的重负载条件下收到此错误。但我的连接是在托管模式下创建的:
并且这个错误应该只发生在非托管连接中:
https://www.ibm.com/support/pages/apar/IT09917
以前有没有其他人遇到过这个错误。
完整错误:
IBM.XMS.IllegalStateException: CWSMQ0076E: 在启用 XA 事务的会话上调用 XA 事务范围之外的 Send 方法无效。应用程序调用了必须在 XA 事务范围内调用的 XA 事务范围之外的方法,因为会话用于 XA 事务。更改应用程序以删除此行为。