【发布时间】:2020-07-08 04:08:40
【问题描述】:
我正在尝试使用 quarkus 创建一个扩展,以便将 ibm mq 用作本机可执行文件。 到目前为止,我已经(在运行时模块中)创建了 ConnectionFactory 生产者:
@ApplicationScoped
public class ConnectionFactoryProducer {
@Produces
@ApplicationScoped
@DefaultBean
public JmsConnectionFactory connectionFactory() throws JMSException {
JmsFactoryFactory ff;
JmsConnectionFactory factory;
ff = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER);
factory = ff.createConnectionFactory();
// Always work in TCP/IP client mode
factory.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
factory.setStringProperty(CommonConstants.WMQ_HOST_NAME, "localhost");
factory.setIntProperty(CommonConstants.WMQ_PORT, 1414);
factory.setStringProperty(CommonConstants.WMQ_CHANNEL, "DEV.ADMIN.SVRCONN");
factory.setStringProperty(CommonConstants.WMQ_QUEUE_MANAGER, "QM1");
factory.setStringProperty(WMQConstants.USERID, "admin");
factory.setStringProperty(WMQConstants.PASSWORD, "passw0rd");
return factory;
}
}
部署模块包含处理器:
public final class IbmExtProcessor {
private static final String FEATURE = "ibm-ext";
@BuildStep
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}
}
其中 FEATURE 是扩展名。
但是当我尝试通过将扩展作为依赖项导入到我的项目中来执行代码时,什么也没有发生。 看起来使用依赖项的类不再出现在应用程序上下文中。 消息生产者示例:
public class NumberProducer implements Runnable {
private final Random random = new Random();
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
@Inject
private ConnectionFactoryProducer cf;
private ConnectionFactory c;
void onStart(@Observes StartupEvent ev) throws JMSException {
c=cf.connectionFactory();
scheduler.scheduleWithFixedDelay(this, 0L, 1L, TimeUnit.SECONDS);
}
void onStop(@Observes ShutdownEvent ev) {
scheduler.shutdown();
}
@Override
public void run() {
JMSContext context = c.createContext();
Queue destination=context.createQueue("queue:///DEV.QUEUE.1");
try {
TextMessage message = context.createTextMessage(String.format("Value : %d", random.nextInt(100)));
JMSProducer producer = context.createProducer();
producer.send(destination, message);
System.out.println(message);
} catch (Exception e) {
throw e;
}
}
}
在这种情况下,我永远不会得到消息变量的打印。任何人都可以帮忙吗?我想我在扩展中遗漏了一些东西,但我不知道可能是什么。
【问题讨论】: