java - 无法将 ObjectMessage 发送到 IBM MQ
问题描述
如何将对象消息发送到 IBM MQ?
我的 Java 代码片段:
QueueConnectionFactory cf;
QueueConnection conn;
MQQueueSession sess;
QueueSender sender;
Queue putQueue = null;
Message RQMessage
//...
cf = new MQQueueConnectionFactory();
((MQQueueConnectionFactory)cf).setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
((MQQueueConnectionFactory)cf).setHostName(host_ip);
((MQQueueConnectionFactory)cf).setPort(1414);
((MQQueueConnectionFactory)cf).setQueueManager(MQMgrName);
((MQQueueConnectionFactory)cf).setChannel(MQChannel);
((MQQueueConnectionFactory)cf).setCCSID(1251);
conn = cf.createQueueConnection(" ", " ");
sess = (MQQeueSession) conn.create
putQueue = ((MQQueueSession)sess).createQueue("queue://"+MQMgrName+"/"+putQueueName);
sender = (MQQueueSender) sess.createSender(putQueue);
MyClass rq_obj = new MyClass();
//MyClass is serializable
rq_obj.setid("1111");
System.out.println(rq_obj.toString());
//got string with my object
RQMessage = sess.createObjectMessage(rq_obj);
RQMessage.setStringProperty("prop_name", "prop_value");
Sender.send(RQMessage);
sess.commit();
由于此代码,我收到一条带有 的消息property prop_name = prop_value
,但消息的正文为空。我不知道为什么,但也许我应该更改我的连接工厂的属性(((MQQueueConnectionFactory)cf).setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);)
但即使是这样,我也不知道我需要什么属性。
解决方案
我更喜欢将数据作为 XML 或 JSON 发送,而不是作为对象发送。同样在几年前,JVM(发送方和接收方)必须处于相同的版本级别,否则无法理解/翻译对象。
从IBM MQ 知识中心,它说您应该这样做:
ObjectMessage objMessage = session.createObjectMessage();
objMessage.setObject(myObj);
publisher.send(objMessage);
推荐阅读
- vuejs2 - 更改 props 时如何触发 AJAX 请求?
- java - NoSuchMethodError ResponseEntity$BodyBuilder
- c# - 如何将数据从数据库传递到控制器,然后在选择选项标签中显示。ASP.NET MVC5
- go - 当我添加表达式“fmt.Println()”时发生了什么
- automated-tests - Katalon - 通过 cmd 并行执行多个浏览器
- javascript - 关于调整/延迟函数计时的 JavaScript 帮助
- java - 添加到 Array-List 在 For-Loop 中不起作用
- git - 了解如何压缩提交
- java - 向 JSP 公开 Spring 组件
- intellij-idea - SBT 无法读取 IntelliJ 中的环境变量