У меня есть поток Spring Integration, который использует входящий шлюз для получения сообщений из очереди IBM MQ:
<int-jms:inbound-gateway id="InputGateway"
request-destination="RequestQueue"
request-channel="RequestChannel"
reply-channel="ReplyChannel"
/>
Однако я не могу назначить параметры безопасности.В частности, мне нужны имя пользователя, пароль и userAuthenticationMQCSP = false (по причинам, выходящим за рамки этого поста, я не буду вдаваться в подробности, но мой брокер выдаст MQRC = 2009 в противном случае).
I 'Мы следовали руководству IBM по соединению с jmsTemplate и работают просто отлично.При этом используется официальный начальный загрузчик Spring от IBM MQ , который любезно создаст фабрику соединений и автоматически сконфигурирует ее с некоторыми значениями по умолчанию из application.properties:
ibm.mq.queueManager=myQMName
ibm.mq.channel=myChannel
ibm.mq.connName=myhostname(myPort)
ibm.mq.user=username
ibm.mq.password=*******
ibm.mq.userAuthenticationMQCSP=false
Теперь вернемся к SpringИнтеграционный кейс.В соответствии со спецификацией int-jms: inbound-gateway , connectionFactory будет внедрен в шлюз по имени (атрибут: фабрика соединений), который по умолчанию настроен как «jmsConnectionFactory»
По умолчанию все адаптеры JMS, для которых требуется ссылка на ConnectionFactory, автоматически ищут bean-компонент с именем jmsConnectionFactory.Вот почему вы не видите атрибут фабрики соединений во многих примерах.Однако, если ваш JMS ConnectionFactory имеет другое имя компонента, вам нужно предоставить этот атрибут.
Я не вижу способа установить предсказуемое имя для фабрики соединений, к которой я могу подключитьсяint-jms: inbound-gateway.
Теперь, используя другой подход, согласно этому примеру Я создал свой ConnectionFactory с адекватным именем:
<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="1"/>
<property name="queueManager" value="myQMName"/>
<property name="hostName" value="myhostname"/>
<property name="port" value="myPort" />
<property name="channel" value="myChannel"/>
</bean>
Но теперь мне нужно где-то поставить учетные данные и параметры безопасности.Глядя на приведенный выше пример, похоже, что мне нужно подключить что-то вроде:
<bean id="secureJmsConnectionAdapter" class="**yourpackages.SecureJMSConnectionAdapter**">
<property name="targetConnectionFactory" ref="${jms.mq.connection.factory}" />
<property name="userName" value="${jms.username}"/>
<property name="pwdAlias" value="${jms.alias}"/>
</bean>
Однако мне неясно, как реализовать этот SecureJMSConnectionAdapter.
Кроме того, если я настрою свойБлагодаря собственной аннотации к классу MQAutoConfiguration :
@ConditionalOnMissingBean(value=javax.jms.ConnectionFactory.class)
Есть идеи о том, как собрать эти части вместе?
Спасибо!(и извиняюсь, если вопрос выглядит неубедительным, но я не очень разбирался в этой ситуации)
РЕДАКТИРОВАТЬ: Просто, чтобы избежать любых возможных красных сельдей, MQRC2009 не имеет отношения к ibm.mq.userAuthenticationMQCSP = false.