Tag: hornetq

Wildfly JMS:当消息存在时,MDB bean空闲

我在Wildfly 8.1(HornetQ)上使用捆绑的JMS实现来OCR大量文档。 我希望有一个3个MDB池,消耗队列的消息和要被OCR的文件。 每个MDB都使用Apache commons-exec启动一个进程并阻塞,直到该进程退出。 在我的测试中,我有50条JMS消息(每条消息代表一个要被OCR的文档),它们在测试开始时加载到队列中。 处理开始时,在任何给定时间我都可以看到有3个CPU密集型OCR进程,一个由每个MDB启动和阻止。 在某些时候,在20分钟左右之后,其中一个OCR过程消失,并且在任何给定时间只有2个保持活着。 当剩余10条JMS消息时,另一个OCR进程停止,并且在任何给定时间只有1个。 最后,所有50个文档都已被OCR,并且任何OCR进程或我的应用程序都不会抛出任何exception。 我发现这种行为很奇怪,因为我希望在任何时间消耗JMS消息时都会有3个OCR进程处于活动状态(当然除外)。 如果在队列中输入时将JMS消息“分配”到MDB实例,而不是实时,则可以解释此行为。 例如,如果为每个MDB分配了大约17条消息。 根据文档大小,当其他MDB实例仍然可以使用消息时,某些MDB实例可以更早地完成并保持空闲而不消耗任何其他消息。 这是发生了什么? 如果是,是否有办法更改此设置,以便每当MDB实例完成处理消息时,都会向MDB实例分配消息? @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = “destinationLookup”, propertyValue = “queue/csrOcrQueue”), @ActivationConfigProperty(propertyName = “minSession”, propertyValue = “3”), @ActivationConfigProperty(propertyName = “maxSession”, propertyValue = “3”) }) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class OcrMessageListener implements MessageListener {

Jboss客户端向Jboss中的远程hornetq发送消息

我有一个在JBoss (JB_Client)中运行的客户端,它需要将消息发送到远程Jboss服务器(JB_Server) HornetQ 。 远程jboss服务器(JB_server)需要将响应消息发送回HornetQ 。 所以JB_Client MDB正在收听远程HorentQ的响应。 我正在为我的客户端和服务器使用Jboss AS6 。 该系统在同一Jboss客户端和服务器本地环境中完美运行。 但现在我需要将客户端和服务器分成两台机器。 这是我的测试客户端配置。 Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY, “org.jnp.interfaces.NamingContextFactory”); prop.put(Context.URL_PKG_PREFIXES, “org.jboss.naming:org.jnp.interfaces”); prop.put(Context.PROVIDER_URL, “jnp://localhost:1099”); ictx = new InitialContext(prop); conFactory = (ConnectionFactory)ictx.lookup(“/ConnectionFactory”); qcon = (QueueConnection)conFactory.createConnection(); qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 除定义的队列外,服务器没有特殊设置。 我需要在服务器和客户端进行哪些配置才能使其工作?

用@Depends注释StatelessBean到HornetQ-JMS队列

我在my-hornetq-jms.xml文件中有一个简单的JMS-Queue定义: 队列被正确激活,现在我想在我的@Stateless Bean中添加一个依赖项。 这个问题类似于当我的webapp在JBOSS 6.0中启动时如何确保大黄蜂队列在那里? ,但我想用注释定义依赖项。 我试过这个(几个排列),但找不到正确的方法: @Depends(value=”org.hornetq:module=JMS,type=Queue,name=my.test.queue”) 我总是得到这样的错误: Dependency “” (should be in state “Installed”, but is actually in state “** UNRESOLVED Demands ‘org.hornetq:module=JMS,name=my.test.queue,type=Queue’ **”) 顺便说一句:在JBoss-5中我定义了这样的: @Depends(value = “jboss.messaging.destination:service=Queue,name=my.test.queue”)

当队列持久时,慢速HornetQ Producer

我在horntQ中尝试过Persistent Queue。 我做了两个单独的例子(Producer,Consumer)。 我的消费者工作得很好,但制作人花了太多时间来完成发送消息。 我既分开也分开跑。 可能是什么问题呢? 我的代码是: public class HornetProducer implements Runnable{ Context ic = null; ConnectionFactory cf = null; Connection connection = null; Queue queue = null; Session session = null; MessageProducer publisher = null; TextMessage message = null; int messageSent=0; public synchronized static Context getInitialContext()throws javax.naming.NamingException { Properties p = new Properties( ); […]

JEE7 + WildFly(HornetQ) – 从应用程序暂停队列

我们使用WildFly + HornetQ作为我们的应用程序服务器和JMS消息队列,并且要求能够从应用程序暂停/恢复队列。 这可能吗?

使用HornetQ在JBoss 7中使用JMS队列的’持久’属性是什么意思?

在使用HornetQ在JBoss 7上配置JMS队列期间(基于standalone-full.xml配置),我注意到一个属性’持久’。 我浏览了几个来源,其中许多人表示队列总是“持久”,这意味着即使在发送时潜在的接收器处于非活动状态,也会始终传递消息。 JBoss 7 HornetQ中的这个属性是指临时队列吗? 或者此属性是否指某种非临时非持久队列?

我应该在基于HornetQ的应用程序中只使用一个Session吗?

在基于HornetQ引擎的应用程序中,我打算创建多个生产者和消费者。 我了解到,由于这个页面 ,我应该尽可能多地重用资源。 这是否意味着,对于我的应用程序,我应该创建一个且恰好一个ConnectionFactory,一个Connection,一个Session然后(使用此Session对象)创建尽可能多的生产者/消费者? 这应该不难,但我不确定这是否是正确的方法。

如何找到horneq队列长度

我正在使用Hornetq 2.0我不明白我怎么知道目前有多少消息在队列中。 这是一个非常有用的function,所以我可以在运行时知道我的消费者是否足够快地消费消息。 我没有使用JMS api,而是使用高度优化的核心API。 获取队列中消息数的正确(最快)方法是什么? 我找到了2路,但不知道这是什么方法。 public int size(){ ClientSession session; try { session = sf.createSession(false, false, false); ClientRequestor requestor = new ClientRequestor(session, “hornetq.management”); ClientMessage m = session.createMessage(false); ManagementHelper.putAttribute(m, “core.queue.” + queueName, “messageCount”); ClientMessage reply = requestor.request(m); int count = (Integer) ManagementHelper.getResult(reply); return count; } catch (Exception e) { e.printStackTrace(); } return 0; } […]

具有多个使用者的JMS队列

我有一个带HornetQ的JBoss-6服务器和一个队列: 有一个不同的消费者(在不同的机器上)连接到此队列,但一次只有一个消费者处于活动状态。 如果我关闭此消费者,消息将立即由其他消费者处理。 由于我的消息有一些耗时的处理,我希望多个消费者同时处理它们的唯一消息。 我记得在早期版本的JBoss中有类似的地方,这个设置没有问题。 在Jboss-6中,消息传递系统运行良好 – 除了上述问题。 这个问题与hornetq中的多个客户端消费者类似吗? ,但情景与我的情况不同。 更新1 :如果我关闭(STRG + C)一个消费者,则短暂超时(直到服务器识别丢失的消费者),直到下一个消费者获得消息。 更新2 :代码段 VoidListener ml = new VoidListener(); QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup(“ConnectionFactory”); QueueConnection conn = qcf.createQueueConnection(); Queue queue = (Queue) ctx.lookup(queueName); QueueSession session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); QueueReceiver recv = session.createReceiver(queue,””); recv.setMessageListener(ml); conn.start(); 和MessageListerner: public class OlVoidListener implements MessageListener { public void […]