-
15. Re: Inconsistant results from QueueBrowser.getEnumeration()
emersonsiegaciss Jul 27, 2015 4:48 PM (in response to clebert.suconic)Hi,
I have the same problem as David. I tried to configure the consumerWindowSize property, but it still don't working.
Follow my configurations:
standalone.xml:
<subsystem xmlns="urn:jboss:domain:messaging:2.0">
<hornetq-server>
<persistence-enabled>true</persistence-enabled>
<journal-file-size>102400</journal-file-size>
<journal-min-files>2</journal-min-files>
<connectors>
<http-connector name="http-connector" socket-binding="http">
<param key="http-upgrade-endpoint" value="http-acceptor"/>
</http-connector>
<http-connector name="http-connector-throughput" socket-binding="http">
<param key="http-upgrade-endpoint" value="http-acceptor-throughput"/>
<param key="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
</connectors>
<acceptors>
<http-acceptor http-listener="default" name="http-acceptor"/>
<http-acceptor http-listener="default" name="http-acceptor-throughput">
<param key="batch-delay" value="50"/>
<param key="direct-deliver" value="false"/>
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
</acceptors>
<security-settings>
<security-setting match="#">
<permission type="send" roles="guest"/>
<permission type="consume" roles="guest"/>
<permission type="createNonDurableQueue" roles="guest"/>
<permission type="deleteNonDurableQueue" roles="guest"/>
</security-setting>
</security-settings>
<address-settings>
<address-setting match="#">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<max-size-bytes>10485760</max-size-bytes>
<page-size-bytes>2097152</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
</address-settings>
<jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/ConnectionFactory"/>
</entries>
<consumer-window-size>0</consumer-window-size>
</connection-factory>
<connection-factory name="RemoteConnectionFactory">
<connectors>
<connector-ref connector-name="http-connector"/>
</connectors>
<entries>
<entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
</entries>
</connection-factory>
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa"/>
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/JmsXA"/>
<entry name="java:jboss/DefaultJMSConnectionFactory"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>
<jms-destinations>
<jms-queue name="orderDuplicateQueue">
<entry name="jms/queue/orderDuplicateQueue"/>
<entry name="java:jboss/jms/queue/orderDuplicateQueue"/>
</jms-queue>
<jms-queue name="orderDownloadQueue">
<entry name="jms/queue/orderDownloadQueue"/>
<entry name="java:jboss/jms/queue/orderDownloadQueue"/>
</jms-queue>
</jms-destinations>
</hornetq-server>
</subsystem>
QueueBrowser:
List<OrderManager> list = new ArrayList<>();
Connection connection = null;
Session session = null;
connection = ((ConnectionFactory) new InitialContext().lookup("java:/ConnectionFactory")).createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) new InitialContext().lookup("jms/queue/orderDuplicateQueue");
QueueBrowser browser = session.createBrowser(queue);
@SuppressWarnings("rawtypes")
Enumeration messageEnum = browser.getEnumeration();
while (messageEnum.hasMoreElements()) {
Message nextElement = (Message) messageEnum.nextElement();
OrderManager order = nextElement.getBody(OrderManager.class);
order.set_id(nextElement.getJMSMessageID());
list.add(order);
}
browser.close();
return list;
MessageListener:
@MessageDriven(name = "MessageMDBOrderDuplicateQueu", activationConfig = {
@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "3"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "/jms/queue/orderDuplicateQueue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "clientFailureCheckPeriod", propertyValue = "600000"),
@ActivationConfigProperty(propertyName = "connectionTTL", propertyValue = "-1"),
@ActivationConfigProperty(propertyName = "consumerWindowSize", propertyValue = "0") })
public class OrderDuplicateMDB implements MessageListener {
...
}
-
16. Re: Inconsistant results from QueueBrowser.getEnumeration()
clebert.suconic Jul 27, 2015 6:03 PM (in response to emersonsiegaciss)I haven't followed your whole discussions, but if you have a consumer acking at the same time you're browsing you can't guarantee browser to receive all the messages. Use a proper topic subscription for that. A message server can't guarantee delivery to a browser with the same semantics as a topic subscription. it simply won't work on any system I know.