java - 使用 MDB 的 WebSphere MQ 中的订阅者授权

标签 java websphere ibm-mq publish-subscribe message-driven-bean

我有一个如下所示的 MDB:

@MessageDriven(mappedName = "jms/TestJeremyTopic ", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TopicReaderBeanClientId"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TopicReaderBeanSubscriptionName")
    })
public class TopicReaderBean implements MessageListener {
    public void onMessage(Message message) {
        ...
    }
}

我已经在 WebSphere MQ 7 中设置了一个主题。使用 MQ Explorer 的 pub 和 sub 操作似乎都可以。

我已经在WebSphere 中设置了监听器端口。监听端口可以启动成功。

当我部署并启动应用程序时,MDB 无法读取任何消息。给出的异常(exception)是:

[1/19/11 10:57:06:569 EST] 00000009 MDBListenerIm W   WMSG0019E: Unable to start MDB Listener TopicReaderBean, JMSDestination jms/TestJeremyTopic :     com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ0026: Failed to subscribe to topic 'TEST_JEREMY' using MQSUB. There may have been a problem creating the subscription due to it being used by another message consumer. Make sure any message consumers using this subscription are closed before trying to create a new subscription under the same name. Please see the linked exception for more information.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:540)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:236)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:123)
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:689)
at com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.initialize(WMQAsyncConsumerShadow.java:714)
at com.ibm.msg.client.wmq.internal.WMQConnectionBrowser.<init>(WMQConnectionBrowser.java:1223)
at com.ibm.msg.client.wmq.internal.WMQConnection.createDurableConnectionBrowser(WMQConnection.java:892)
at com.ibm.msg.client.jms.internal.JmsConnectionImpl.createDurableConnectionBrowser(JmsConnectionImpl.java:1035)
at com.ibm.msg.client.jms.internal.JmsConnectionConsumerImpl.createConnectionBrowser(JmsConnectionConsumerImpl.java:236)
at com.ibm.msg.client.jms.internal.JmsConnectionConsumerImpl.<init>(JmsConnectionConsumerImpl.java:163)
at com.ibm.msg.client.jms.internal.JmsConnectionImpl.createDurableConnectionConsumer(JmsConnectionImpl.java:502)
at com.ibm.msg.client.jms.internal.JmsXAConnectionImpl.createDurableConnectionConsumer(JmsXAConnectionImpl.java:222)
at com.ibm.mq.jms.MQConnection.createDurableConnectionConsumer(MQConnection.java:300)
at com.ibm.ejs.jms.JMSTopicConnectionHandle.createDurableConnectionConsumer(JMSTopicConnectionHandle.java:228)
at com.ibm.ejs.jms.listener.MDBListenerImpl.createResources(MDBListenerImpl.java:597)
at com.ibm.ejs.jms.listener.MDBListenerImpl.internalStart(MDBListenerImpl.java:756)
at com.ibm.ejs.jms.listener.MDBListenerImpl.restart(MDBListenerImpl.java:729)
at com.ibm.ejs.jms.listener.MDBListenerImpl.alarm(MDBListenerImpl.java:1151)
at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:127)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:223)
... 18 more

我怀疑虽然监听器端口能够启动,但在附加的应用程序尝试使用它之前它不会主动连接。此时已通过身份验证,但尚未授权。

问:WebSphere 中的身份验证凭据在哪里配置?我不知道我正在验证谁的身份。是 MDB 中 @ActivationConfigProperty 中设置的客户端 ID 吗?

问:MQ Explorer 中的授权设置在哪里?我没有看到任何方法可以向团体或个人授予 pub 或 sub 权限。目前它设置为允许/允许,大概对所有人来说。

最佳答案

身份验证和授权在操作系统级别进行控制。展台用户/组管理是这里的关键。不要忘记在 MQ Explorer 中执行以下操作:QueueManager -> 安全 -> 刷新授权服务。

关于java - 使用 MDB 的 WebSphere MQ 中的订阅者授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4732169/

相关文章:

java - 在 MQ v6 api 中 - 如何停止 MQQueue get() 方法?

websphere - 主题消息驱动 Bean 在 Websphere 8.5.5 集群环境中的行为如何

java - 使用 google docs api (java) 创建 Google 文档

java - 无法让@Autowired 与 bean 一起工作

java - 在 MAC 上将 Java 堆空间的最大可表示大小增加到 6GB 以上

java - Angular7 + maven 出现 IBM websphere 错误(frontend-maven-plugin :1. 0:npm(npm 安装失败))

java - 无法在 WebSphere 中以编程方式创建 JMS 主题

java - 如何运行 maven-antrun-plugin 目标?

java - 应用服务器和 Spring 上下文加载

c# - MQRC_KEY_REPOSITORY_ERROR