小编T V*_*pta的帖子

如何使用虚拟目标创建activemq主题订阅者的多个实例?

我有一个将消息推送到主题的发布者.我有多个订阅者,一旦他们使用来自主题的消息,就会执行不同的任务.现在,我希望我的系统可以扩展到在不同主机/同一主机上运行的同一进程的多个实例.例如,我想在不同的主机上运行我的应用程序A的多个副本,这样如果A的一个实例很慢,那么其他实例可以引入后续消息并继续前进.我发现这可以使用虚拟目标.我按照这里的步骤 - http://activemq.apache.org/virtual-destinations.html

但是,如何使用相同的客户端ID将我的多个订阅者设置为相同的主题?当我尝试这样做时,我会收到错误.当我尝试其他方式时,它不起作用.有人可以帮忙吗?

通常,我通过以下步骤启动订阅者 -

        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL;);
        activeMQConnection = connectionFactory.createConnection();

        activeMQConnection.setClientID("subscriber1");
        activeMQConnection.setExceptionListener(exceptionListener);
        activeMQSession = activeMQConnection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
        activeMQTopic = activeMQSession.createTopic("myTopic");            
        activeConsumer = activeMQSession.createDurableSubscriber(activeMQTopic, "myTopic");            
        activeConsumer.setMessageListener(messageListener);
        activeMQConnection.start();
Run Code Online (Sandbox Code Playgroud)

当我尝试创建第二个订阅者并将主题名称传递为"VirtualTopic.myTopic"时,没有任何反应.

谢谢

java messaging activemq-classic jms

5
推荐指数
2
解决办法
8850
查看次数

这个用例可以在ehcache中解决吗?

我想使用ehcache不仅作为缓存,而且作为脏对象的容器,当对象被逐出/过期时,我想要刷新到我的数据库.在正常处理期间,我使用密钥在ehcache中查找.如果key不存在,我从数据库中读取数据并将其放入ehcache中.该值实际上是我修改的复杂对象.当ttl/idle time/overflow条件发生时,我看到调用了CacheEventListener回调.但是有一个大问题.从缓存中删除键值后调用notifyElementExpired.所以有竞争条件.如果我在notifyElementExpired中执行刷新脏值以缓存的任务,同时在另一个线程中读取相同的密钥,则会出现同步问题.第二个线程将无法在ehcache中找到该对象,因此将转到数据库,而另一个线程仍在准备刷新.

我试着尝试使用直写式ehcache,我不认为那也有效.

这里有解决方案吗?

我真的很感激这个问题的好解决方案,即使它涉及除了ehcache之外的其他一些缓存机制.

谢谢

java synchronization caching asynchronous ehcache

5
推荐指数
1
解决办法
695
查看次数