[
https://issues.apache.org/jira/browse/CAMEL-9567?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-9567.
--------------------------------
Resolution: Fixed
Assignee: Claus Ibsen
> SjmsConsumer does not suspend (on Camel context) stop
> -----------------------------------------------------
>
> Key: CAMEL-9567
> URL: https://issues.apache.org/jira/browse/CAMEL-9567
> Project: Camel
> Issue Type: Bug
> Components: camel-sjms
> Affects Versions: 2.16.2
> Reporter: Zdeněk Obst
> Assignee: Claus Ibsen
> Labels: camel-sjms
> Fix For: 2.15.6, 2.16.3, 2.17.0
>
>
> When using SjmsConsumer that consumes JMS messages from broker (e.g.
> ActiveMQ) and *stop Camel Context, the consumer still reads new messages from
> broker* even if it should only finish processing of already fetched messages.
> It causes that Context is never stopped if there are still new and new
> messages in the broker (or before timeout for stop operation occurs).
> When I investigated code, it seems that suspend operation is not implemented
> (or code does not check isSuspended flag). What I would expect is that
> consumer unregisters JMS listener on context stop (consumer suspend).
> Here is the sample code I used for testing:
> {code:java}
> public class Test {
> public static void main(String[] args) throws Exception {
> // pre-fill JMS Broker with many many messages, e.g. 10.000
> RouteBuilder rb = new RouteBuilder() {
> @Override
> public void configure() throws Exception {
> from("sjms:queue:test?consumerCount=5")
> .process(new Processor() {
> @Override
> public void process(Exchange exchange) throws
> Exception {
> Thread.sleep(1000); // not to consume all
> messages instantly
> System.out.println("Processed message " +
> exchange.getExchangeId());
> }
> });
> }
> };
> CamelContext context = new DefaultCamelContext();
> context.getShutdownStrategy().setTimeout(1000); // 1000s = big enough
> timeout so I can be sure it is consumer problem
> addJmsComponent(context);
> context.addRoutes(rb);
> System.out.println("=====> Starting context");
> context.start();
> Thread.sleep(5 * 1000); // Consume few messages at the beginning
> System.out.println("=====> Stopping context");
> context.stop();
> System.out.println("=====> Context stopped"); // Will not get here as
> long as there are any messages left in the queue
> }
> private static void addJmsComponent(CamelContext context) {
> ConnectionFactory factory = new
> ActiveMQConnectionFactory("tcp://localhost:61616"); // ActiveMQ is easiest
> for testing this
> ConnectionFactoryResource connResource = new
> ConnectionFactoryResource(5, factory);
> SjmsComponent comp = new SjmsComponent();
> comp.setConnectionResource(connResource);
> context.addComponent("sjms", comp);
> }
> }
> {code}
> The original mailing list thread:
> http://camel.465427.n5.nabble.com/CamelContext-stop-with-SJMS-consumer-does-not-stop-consuming-messages-from-broker-td5777207.html
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)