当前位置: 首页 > 知识库问答 >
问题:

为Camel JMS生产者设置ConnectionFactory:Camel JMS Vs Camel sjms

商佑运
2023-03-14

您好,我的基本要求是有一个可以发送消息的路由,并将其放在JMS队列中。camel上下文在JavaEE 6容器中运行,即JBoss AS 7.1.1,因此它附带了HornetQ for JMS;我通过引导单例启动上下文,但我不使用camel cdi。到目前为止,我一直在使用camel-jms组件,但现在我希望尽可能迁移到camel-sjms,因为springless。

我的问题是:在这个JavaEE场景中为camel-sjms配置ConnectionFactory的正确方法是什么?

使用camel-jms,我可以将其放在endpointURL中,非常简单。至(“jms:myQueue?connectionFactory=#connectionFactory”)。相反,对于camel-sjms,在我看来,我需要自己创建一个SJMSComponent实例,设置connectionFactory,并在启动之前在camel上下文中设置该实例。

我下面有camel-jms Vs camel-sjms案例的代码,我想知道我是否正确“迁移”了ConnectionFactory的设置。谢谢。

@Singleton
@Startup
public class CamelBootstrap {
    private CamelContext camelContext;
    private ProducerTemplate producerTemplate;

    public CamelContext getCamelContext() {
        return camelContext;
    }

    public ProducerTemplate getProducerTemplate() {
        return producerTemplate;
    }

    @PostConstruct
    public void init() throws Exception {
        camelContext = new DefaultCamelContext();
        camelContext.addRoutes(new MyCamelRoutes());
        camelContext.start();
        producerTemplate = camelContext.createProducerTemplate();
    }
}

没什么特别的,在MyCamelRoutes中,我可以使用以下方式进行路由配置:

.to("jms:myQueue?connectionFactory=#ConnectionFactory")
@Singleton
@Startup
public class CamelBootstrap {

    @Resource(mappedName="java:/ConnectionFactory")
    private ConnectionFactory connectionFactory;

    private CamelContext camelContext;
    private ProducerTemplate producerTemplate;

    public CamelContext getCamelContext() {
        return camelContext;
    }

    public ProducerTemplate getProducerTemplate() {
        return producerTemplate;
    }

    @PostConstruct
    public void init() throws Exception {
        camelContext = new DefaultCamelContext();

        SjmsComponent sjms = new SjmsComponent();
        sjms.setConnectionFactory(connectionFactory);
        camelContext.addComponent("sjms", sjms);

        camelContext.addRoutes(new MyCamelRoutes());
        camelContext.start();
        producerTemplate = camelContext.createProducerTemplate();
    }
}

请注意连接工厂的@Resources,这是作为对SjmsComponent实例的引用传递的,该实例被传递给camelContext。然后在MyCamelRoutes中,我可以使用sjms,同时使用:

.to("sjms:myQueue")

共有1个答案

皇甫逸清
2023-03-14

如果不缓存/池化JMS资源,可能会出现性能问题。缓存通常是通过在某些缓存ConnectionFactory库中包装ConnectionFactory来配置的,或者通过将控制权移交给应用程序服务器来配置的。

Camel SJMS包括内置池。但是,如果您有容器管理的资源来处理JMS连接,您可能应该考虑使用它。SJMS有一些工具来处理它,ConncetionResources而不是ConnectionFactory。

 类似资料:
  • 我有一个消费者作为生产者消费者模式的一部分: 简化: 如果我移除 通过将线程设置为睡眠,CPU使用率攀升到极高的水平(13%),而不是0%。 此外,如果我实例化该类的多个实例,则每个实例的CPU使用率都会以13%的增量攀升。 大约每分钟(可能每30秒)都会向BlockingCollection添加一个新的LogItem,并将适用的消息写入文件。 有没有可能线程以某种方式阻止了其他线程的运行,而系统

  • proxy.conf.js在开发模式下按预期工作。 我在package.json文件中有这些文件用于启动和构建。 在我运行“NPM run Build”并使用结果文件在IIS8上托管网站后,需要使用代理设置的页面就不工作了。 例如,我的请求https://localhost/web/api/webclients/authentication应该转到https://10.109.102.109/we

  • 我在找一个微服务协调器,遇到了优步卡登斯。我已经阅读了文档,并在开发设置中使用了它。 我对生产场景有几个问题: > 是否建议为工作流及其使用的不同活动设置一个专用的任务列表?或者,我们应该为所有人使用一个任务列表?这个决定会影响可扩展性或性能吗? 当我们添加新的工作线程计算机时,在同一台计算机中为不同的活动/工作流运行所有工作线程是否是一种常见的做法?例: 或者我们应该在专用机器中运行每个活动/工

  • 我需要设置Kafka生产商发送500 msg在一批不是由味精味精,但批量进口味精。我查过了https://github.com/dpkp/kafka-python/issues/479并尝试了但失败并出现错误: 我也试着像《代码》制作人一样通过考试。制作(主题,*消息)失败: 因此,我挖掘了更多信息,发现我必须在producer配置中将类型设置为async和batch。大小要大于默认值,但当我尝试

  • 我使用的是Kafka producer客户端,我的项目中没有任何log4j配置。 在运行时,程序打印了大量的Kafka调试日志,这是我不想要的。

  • RF=3,ISR=3,ACK=全部>>>发送成功 RF=3、ISR=2、ACK=全部>>>发送成功 RF=3、ISR=1、ACK=全部>>>发送成功 RF=3、ISR=1、acks=all、MIN.ISR.REPLICAS=3>>>发送成功! 那么,如果复制因子为4,ISR为3,并且生产者ACK设置为all,那么生产者将等待多少ACK呢?我尝试了不同的场景,真实的行为应该是什么?