当前位置: 首页 > 知识库问答 >
问题:

spring DefaultMessageListenerContainer和websphere MQ-连接队列管理器失败

糜雪峰
2023-03-14

我是尝试使用websphereMq和spring jms功能通过soap over jms实现服务的新手。我已经确定下面的事情

  • 生成的绑定文件没有遇到任何错误
  • 队列管理器和队列的状态为已启动并正在运行。

我在尝试将消息放入websphereMQ时遇到以下错误

    null
public class JmsTransportWebServiceIntegrationTest {

 private static final String expectedResponseContent =  "<tns:placeOrderResponse xmlns:tns=\"http://www.packtpub.com/liverestaurant/OrderService/schema\"><tns:refNumber>order-xxxx_yyyy_1234</tns:refNumber></tns:placeOrderResponse>";

@Autowired
private WebServiceTemplate webServiceTemplate;


public void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) {
    this.webServiceTemplate = webServiceTemplate;
}

@Test
public void testSendReceive() throws Exception {
    InputStream is = new JmsTransportWebServiceIntegrationTest().getClass().getResourceAsStream("placeOrderRequest.xml");
    StreamSource source = new StreamSource(is);
    StringResult result = new StringResult();
    webServiceTemplate.sendSourceAndReceiveToResult(source, result);
    XMLAssert.assertXMLEqual("Invalid content received", expectedResponseContent, result.toString());
}  }
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
 <property name="environment">
   <map>
     <entry key="java.naming.factory.initial" 
            value="com.sun.jndi.fscontext.RefFSContextFactory"/>     
          <entry key="java.naming.provider.url"  value="file:C:/JNDI-Directory" />
   </map>
 </property>
</bean>
<bean id="ibm-mq-jms-qcf" class= "org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>jms/mdpSampleQCF</value>
    </property>
</bean>

<!-- Bean for JMS Destination -->
<bean id="ibm-mq-queue" class= "org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>jms/mdpSampleQueue</value>
    </property>
</bean>
<bean id="listenerContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="concurrentConsumers" value="1" />
    <property name="connectionFactory" ref="ibm-mq-jms-qcf" />
    <property name="destination" ref="ibm-mq-queue" />
    <property name="messageListener">
        <bean class="org.springframework.ws.transport.jms.WebServiceMessageListener">
            <property name="messageFactory" ref="messageFactory"/>
            <property name="messageReceiver" ref="messageDispatcher"/>
        </bean>
    </property>
</bean>
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory"/>
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.jms.JmsMessageSender">
            <property name="connectionFactory" ref="ibm-mq-jms-qcf"/>
        </bean>
    </property>
    <property name="defaultUri" value="jms:mdpSampleQueue?deliveryMode=NON_PERSISTENT"/>
</bean>

<bean id="messageDispatcher" class="org.springframework.ws.soap.server.SoapMessageDispatcher">
    <property name="endpointMappings">
        <bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
            <property name="defaultEndpoint">
                <bean class="com.packtpub.liverestaurant.service.endpoint.SimplePayloadEndpoint">
                <property name="orderService">
                 <bean class="com.packtpub.liverestaurant.service.OrderServiceImpl"/>
                </property>
                </bean>
            </property>
        </bean>
    </property>
</bean

共有1个答案

颛孙嘉玉
2023-03-14

我知道这是一个很老的问题,但也许我的答案会对将来的人有所帮助。

我现在使用的是WebSphere MQ7.5,在安装过程中也有一些Java类。在我的C:\program Files(x86)\IBM\WebSphere mq\tools\wmqjava\samples安装中,有一个名为mqivp.java的文件对我帮助很大。首先用这个类测试设置非常好。从这个类的来源我们可以发现2058代表:

原因:2058-队列管理器名称无效或未知。

 类似资料:
  • 我正在尝试使用ccdt.tab文件连接到队列管理器。以下是我所尝试的: 以下是ccdt.tab中的内容 有谁知道哪里出了问题,怎么修复? PS:我确实看到了那些帖子:在JMS中使用CCDT文件连接到IBM MQ 下面是链接的异常和异常在I时打印出来的: 以下是当我时链接的异常和异常打印:

  • 我是WebSphere MQ的初学者,我在MQ6上工作,它工作得很好,但现在我安装了MQ7.1,当我试图创建一个新的队列管理器时,我可以创建它,但它不能连接,这给我带来了以下错误: 你对此有什么想法吗?谢谢:)

  • JMS应用程序需要七个参数才能与这里给出的MQ系列进行成功的SSL连接,https://github.com/ibm-messaging/mq-tls-ssl-wizard/blob/master/com.ibm.MQ.ssl-wizard/sample/sslsamplejms.java 我试图解释这些参数, > conname-服务器队列管理器的连接名,格式与MQSC DEFINE CHANN

  • 我在 Linux 平台上安装了 WebSphere MQ 7.1,之后我安装了 WebSphere 消息代理 8.0.0.1。现在,当我尝试创建执行组时,我得到一个异常:原因码 2035。此异常表示用户未经授权连接到队列管理器。我已将此用户添加到 组中。当我使用MQ 7.0.x时,我没有遇到任何这样的问题。我搜索了很多,知道 MQ 7.1 中存在用户 ID 阻塞。但是,我希望此用户能够创建执行组,

  • 我所做的更改是使用defaut队列管理器(wmqconstants.wmq_queue_manager为空字符串)、使用“绑定”连接模式(wmqconstants.wmq_cm_bindings)和删除主机(wmqconstants.wmq_host_name为空字符串)。我收到以下例外: 当我指定主机时,它可以使用“客户端”连接模式,但不能使用绑定。此外,当指定队列管理器时,“绑定”连接模式也可