使用spring引导和IBM,我需要向MQ发送消息。
在我的Spring应用程序中,我注册了MQQueueConnectionFactory,如下所示。
@SpringBootApplication
@EnableJms
public class MainApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(MainApplication.class).web(WebApplicationType.NONE).run(args);
logger.info("init completed...");
}
@Bean
public MQQueueConnectionFactory queueConnectionFactory() {
MQQueueConnectionFactory queueConnectionFactory = new MQQueueConnectionFactory();
try {
queueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
queueConnectionFactory.setHostName(host);
queueConnectionFactory.setChannel(channel);
queueConnectionFactory.setPort(port);
queueConnectionFactory.setQueueManager(queueManager);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return queueConnectionFactory;
}
}我有如下所示的目的地解析器。
@Component
public class IBMWebSphereMqDestinationResolver extends
DynamicDestinationResolver implements DestinationResolver {
@Override
public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) throws JMSException {
Destination destination = super.resolveDestinationName(session, destinationName, pubSubDomain);
if (destination instanceof MQDestination) {
MQDestination mqDestination = (MQDestination) destination;
}
return destination;
}
}我使用JmsTemplate向MQ发送消息。
@Service
public class MqServiceImpl implements MqService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private MQDestination destination;
@Handler
@Override
public void sendMessage(String textMessage) {
logger.info("textMessage {} ", textMessage);
logger.info("destination {} ", destination);
jmsTemplate.convertAndSend(destination, textMessage);
}
}然而,当我尝试启动应用程序时,我得到的是MQDestination' that could not be found.
service.impl.MqServiceImpl required a bean of type 'com.ibm.mq.jms.MQDestination' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.ibm.mq.jms.MQDestination' in your configuration.难道spring不应该打电话给DestinationResolver吗?
如果不是,如何为IBM注册目的地?
发布于 2019-04-08 07:28:22
您正在定义一个DestinationResolver bean,但是注入了一个MQDestination bean。这就是为什么你会犯这个错误。您应该注入DestinationResolver并在JmsTemplate上调用setDestinationResolver。
但是JmsTemplate动态地解析目的地。这也适用于:
public void sendMessage(String textMessage) {
String destination = "MY.QUEUE";
jmsTemplate.convertAndSend(destination, textMessage);
}https://stackoverflow.com/questions/55567335
复制相似问题