Quarkus应用程序可以连接到多个JMS代理实例吗?

问题描述

是否可以使用Quarkus应用程序中的JMS连接到ActiveMQ Artemis的多个实例?

我在the documentation中看到,对于[Qpid JMS-AMQP]和[Artemis JMS],属性中的连接URL都是字符串,并且是必需的。这是否意味着我无法指定要连接的多个代理URL?

由于this current bug,我不想使用camel-quarkus-activemqcamel-quarkus-jms

解决方法

就像@Robbie Gemmell在评论中指出的那样。

一个ConnectionFactory接受必需参数的代理URL。然后对于其他ConnectionFactory,我们可以直接实例化它。像这样:

application.properties

# Configures the Artemis properties.
quarkus.artemis.url=tcp://localhost:61616
quarkus.artemis.username=admin
quarkus.artemis.password=admin

# Broker URL for the second ConnectionFactory
brokerURLService=tcp://remote-service:61616

CamelConfiguration

@ApplicationScoped
public class CamelConfigurationz {

  @Value("${brokerURLService}")
  private String brokerURLService;

  @Named
  public Sjms2Component sjms2(ConnectionFactory connectionFactory) {
    Sjms2Component sjms2 = new Sjms2Component();
    sjms2.setConnectionFactory(connectionFactory);
    return sjms2;
  }

  @Named
  public Sjms2Component sjms2Service(ConnectionFactory amqJmsServiceFactory) {
    Sjms2Component sjms2Service = new Sjms2Component();
    sjms2Service.setConnectionFactory(amqJmsServiceFactory);
    return sjms2Service;
  }

  @Named
  public ActiveMQJMSConnectionFactory amqJmsServiceFactory() throws JMSException {
    ActiveMQJMSConnectionFactory amqJmsServiceFactory = new ActiveMQJMSConnectionFactory();
    amqJmsServiceFactory.setBrokerURL(brokerURLService);
    return amqJmsServiceFactory;
  }

}

路线

public class CamelRoutes extends EndpointRouteBuilder {

  @Override
  public void configure() throws Exception {

    from(sjms2("inquarkus"))
    .log("got activemq message ---------------------------------")
    .to(sjms2("outquarkus"));
    
    from(sjms2("sjms2Service","inquarkusService"))
    .log("got activemq message service ---------------------------------")
    .to(sjms2("sjms2Service","outquarkusService"));

  }

}

可以做不同的事情,因此请注意,在上面的示例中,我也使用spring di扩展名来使用@Value。还可以使用camel-quarkus-endpointdsl来使用EndpointRouteBuilder。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...