我们的Java应用程序通过Weblogic JMS消息桥写入MQ Series队列.实际的MQ Series连接/队列详细信息存储在应用服务器上的MQ Series .bindings文件中.我从来没有真正了解绑定文件以及所有条目的含义.有人可以提供指导来理解这个文件吗?
我想通过Java连接到Websphere 6.0 MQ.我已经为"普通"队列工作了代码,但现在我需要访问一个SSL加密的新队列(密钥库).我已经发送了一个名为something.jks的文件,我认为这是一个我需要存储在某处的证书.我一直在网上搜索,但我找不到合适的信息.
这是我用于"普通"队列的代码.我假设我需要设置一些属性,但不确定是哪一个.
MQQueueConnectionFactory connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setChannel(channel_);
connectionFactory.setHostName(hostname_);
connectionFactory.setPort(port_);
connectionFactory.setQueueManager(queueManager_);
connectionFactory.setTransportType(1);
connectionFactory.setSSsetSSLCertStores(arg0)
Connection connection = connectionFactory.createConnection();
connection.setExceptionListener(this);
session_ = connection.createSession(DEFAULT_TRANSACTED, DEFAULT_ACKMODE);
connection.start();
javax.jms.Queue fQueue = session_.createQueue(queue_);
consumer = session_.createConsumer(fQueue);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JMS访问MQ队列.我得到了以下
java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path
Run Code Online (Sandbox Code Playgroud)
我过世了
-Djava.library.path="C:\Program Files\IBM\WebSphere MQ\java\lib"
Run Code Online (Sandbox Code Playgroud)
作为在eclipse中运行程序时的VM参数.这个问题在网上讨论得很多,但没有任何结论.有人解决了吗?TIA.
也许我正在咆哮错误的树 - 但我有一组使用WebSphere MQ与其他系统交互的服务(WebAPI和WCF).
这没有问题 - 直到我现在需要listening在其中一个队列上找到消息的方法.
这甚至是可能的,还是我需要沿着Windows服务路线走?
我正在深入探讨Websphere MQ作为火花流的数据源的可能性,因为在我们的一个用例中需要它.我知道MQTT是支持MQ数据结构通信的协议,但由于我是一个引发流式传输的新手,我需要一些相同的工作示例.有人试图用火花流连接MQ.请设计最好的方法.
背景: 我有一个相对较旧的应用程序,它使用Websphere MQ进行消息传递.它在WAS(Websphere Application Server)上运行并使用MDB(消息驱动Bean).我成功地使用Spring Integration - JMS替换了所有MDB .我的下一步是尝试查看是否可以将其移出WAS,以便它可以在任何其他具有非IBM JRE的servlet容器上运行(我正在尝试:apache tomcat).请注意,使用SSL保护通道是必需的.我更喜欢使用JNDI.
最终目标: 将我的应用程序与应用程序服务器(WAS)和其他基础结构(如消息传递(MQ))分离.但是将这个从WAS中取出来到tomcat是第一步.接下来是使用更具可伸缩性的东西更新我的消息传递基础结构 这使我能够更新我的应用所依赖的基础架构的各个组件,一次一件事(应用服务器,消息传递层,数据存储),而不会过多地中断我的应用程序.
问: 现在,我的挑战是在tomcat上定义可以访问Websphere MQ的JNDI资源.我使用我在context.xml文件中定义的非SSL通道在这方面取得了一些进展,如下所示:
<Resource
name="jms/qcf_sandbox"
auth="Container"
type="com.ibm.mq.jms.MQQueueConnectionFactory"
factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
description="JMS Queue Connection Factory for sending messages"
HOST="localhost"
PORT="1414"
CHAN="CHANNEL_SANDBOX"
TRAN="1"
QMGR="QM_SANDBOX"/>
<Resource
name="jms/SandboxQ"
auth="Container"
type="com.ibm.mq.jms.MQQueue"
factory="com.ibm.mq.jms.MQQueueFactory"
description="JMS Queue"
QU="SANDBOX_Q"/>
Run Code Online (Sandbox Code Playgroud)
我的下一步是使用SSL通道.我理解涉及设置密钥库(kdb文件和证书生成和交换),在QM等上配置SSL通道的部分.我已经完成了所有工作.如何让tomcat使用我的密钥库,密码套件等?指针或工作示例会很棒!
注意:我目前正在使用Spring Integration 4.2,Websphere MQ v8,Tomcat v9.
我必须补充一点,我确实在没有JNDI的情况下尝试了一切.所以这里是没有JNDI的我的spring jms non-ssl配置,它的工作原理如下:
<bean id="mq-jms-cf-sandbox"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory">
<ref bean="mqQueueConnectionFactory" />
</property>
</bean>
<bean id="mqQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="localhost" />
<property name="port" value="1414" />
<property name="queueManager" value="QM_SANDBOX" />
<property …Run Code Online (Sandbox Code Playgroud) 我正在处理的应用程序需要与远程位置的IBM MQ服务器进行通信.我们目前有一个使用活动MQ的工作系统,它使用代理,以及连接到这个远程IBM MQ服务器的桥,并且工作正常.
由于一些新的增强,我们现在尝试使用IBM客户端jar而不是Active MQ来实现相同的功能.
我面临的问题是我可以连接到远程服务器的inboundQ并发送消息.但我总是从远程服务器出站队列接收null.但我无法检查是否在远程位置收到了消息.但是,如果通过旧的ActiveMQ系统发送相同的消息将从远程MQ服务器获得响应.
旧的Active MQ在内部使用桥连接到远程IBM MQ服务器,该服务器的配置与我正在使用的新代码完全相同.
我已尝试从互联网和堆栈溢出本身的多个代码,并始终我能够连接但没有得到任何响应.
此外,尝试从远程IBM MQ发送或接收时,我没有收到任何错误或异常.
我将粘贴一个我试图开始工作的示例代码.我在代码中更改了一些配置值.
我怀疑如下.
我正在做的就是将IBM MQ客户端jar复制到应用程序中,并使用代码将消息发送到远程MQ.我还没有安装任何其他应用程序.这样的系统会工作还是应该总是有一些像活动MQ这样的中间程序?
相同的代码能够从我在本地网络中安装但未能从远程服务器获得响应的IBM MQ服务器发送和接收?这让我相信如果我在配置中遗漏了什么?除了在代码中还应该配置什么?
我看到没有错误或例外.始终发送消息但响应为空.我没有看到任何用户名密码或公钥 - 私钥认证的使用.是否通常使用任何身份验证来检查源.?
我正在使用IBM MQ客户端5.3版本,我知道它已经过时了.但是使用它,因为它们工作的主动MQ设置使用相同的并且正常工作.我无法知道远程计算机上的IBM MQ服务器上存在哪个版本.如果我们使用与服务器MQ版本不同的客户端MQ版本,是否存在问题.?
在本地环境中适用于我的示例代码,即能够从我在本地网络中的另一台机器上安装的IBM MQ服务器发送和接收.当我尝试将其与远程IBM MQ服务器一起使用时,相同的代码将获取null响应.
import javax.jms.*;
import javax.jms.JMSException;
import com.ibm.mq.jms.*;
import com.ibm.jms.JMSMessage;
import javax.jms.TextMessage;
public class SendReceive {
private MQQueueConnectionFactory connectionFactory;
private MQQueueConnection connection;
private void runTest() {
try {
connect();
connection.start();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("INBOUND_QUEUE"); /* values replaced with correct values in deployment server */
MQQueue queue2 = (MQQueue) …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个项目,我需要与IBM系统进行交互,该系统通过WebSphere MQ与外部世界进行通信.我需要使用队列以"请求 - 响应"方式查询系统,我将通过队列管理器执行此操作.
但是,我无法理解这在实际工作中是如何运作的.
假设我有相同应用程序的多个实例,它们将消息放入请求队列.该消息得到了CorrelationId和MessageId在离开应用程序和ReplyToQueue属性,都会设置每封邮件,以确保该队列管理器知道哪个队列把到响应.
但是,队列管理器如何操作响应队列?关于响应的时间安排无法保证,那么正确的响应如何回到发出相应请求的应用程序实例?
我一直认为消息队列是一个FIFO队列,必须逐个拾取消息.但是,这意味着实例A可以选择针对例如B的响应.显然,这不是它的工作原理.
然后,当我看API( com.ibm.mq.MQQueue)我看到来接的消息我有机会提供CorrelationId和MessageId请求消息的.这是否意味着当我向队列管理器查询消息(具有这些ID的集合)时,队列管理器会遍历队列中的消息并返回匹配的消息?另一方面,这意味着我们不是在谈论FIFO队列?
我使用Oracle Service Bus(OSB)作为MOM,目标URI是IBM MQ队列.我只是想知道哪个是首选的运输工具.OSB为相同的JMS适配器和MQ适配器提供2个适配器以进行传输.有没有人知道什么是PROS和相同的CONS.TIA
我在基于Spring的webapp上遇到问题,该Webapp正在部署到Websphere并与IBM MQ交互.
一切都很好,直到我尝试一些失败测试.
当webapp启动并运行时,我会停止IBM MQ.然后我调用webapp发送JMS消息.Web应用程序在调用JmsTemplate.convertAndSend时挂起,并在ffdc目录中找到以下异常.
注意JmsTemplate是使用JNDIObjectFactoryBean初始化的,它从Websphere获得了MQ Connection Factory设置.
谁能解释"初始化失败"背后的原因?
[27/01/11 14:29:39:498 GMT] FFDC Exception:java.lang.NoClassDefFoundError SourceId:com.ibm.ws.asynchbeans.J2EEContext.run ProbeId:894 Reporter:com.ibm.ws.asynchbeans.J2EEContext@1280128
java.lang.NoClassDefFoundError: com.ibm.msg.client.wmq.common.internal.Reason (initialization failure)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:140)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.checkJmqiCallSuccess(WMQMessageProducer.java:1024)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.checkJmqiCallSuccess(WMQMessageProducer.java:997)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.access$800(WMQMessageProducer.java:63)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.initialise(WMQMessageProducer.java:758)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.<init>(WMQMessageProducer.java:972)
at com.ibm.msg.client.wmq.internal.WMQSession.createProducer(WMQSession.java:943)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1162)
at com.ibm.msg.client.jms.internal.JmsQueueSessionImpl.createSender(JmsQueueSessionImpl.java:131)
at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:148)
at com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:249)
at com.ibm.ejs.jms.JMSMessageProducerHandle.<init>(JMSMessageProducerHandle.java:132)
at com.ibm.ejs.jms.JMSSessionHandle.createProducer(JMSSessionHandle.java:1788)
at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:968)
at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:949)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:568)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:541)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:471)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:539)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:617)
Run Code Online (Sandbox Code Playgroud)