camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pmcb55 <mcbenne...@dnb.com>
Subject Re: Bug with 'addEventNotifier' - fires two 'exchange sent' events for each Exchange sent.
Date Mon, 12 Aug 2013 12:38:38 GMT
Hi Claus - thanks again for the response, but I'm still unclear. I've been
playing with my test code, and I think this version might illustrate the
problem better (I now define endpoints instead of my simpler original that
only had a 'Processor()', and I've added 'Thread.sleep()' to the endpoints
to show timings).

Notice that the output is *almost* perfect - the only problem is that I get
one extra (spurious to my mind!) event being fired (by the ProducerTemplate,
as your first reply made clear), which of course screws up invocation counts
and average timings for the overall route [direct://testRouteTest].

I know I could probably jump to JMX for all this, but first is there any
easy way to eliminate this last event being fired? As you can see from the
output, everything would be perfect otherwise - i.e. this code is extremely
simple and intuitive, and I'd like to keep it that way if possible.


OUTPUT (perfect except for last event, in *bold*):
--------

Route 1
ID-UKDB1764398-61884-1376310614400-0-2 exchange Exchange[Message: [Body is
null]] sent to: Endpoint[direct://testRoute1] took: 307 ms.
Route 2
ID-UKDB1764398-61884-1376310614400-0-2 exchange Exchange[Message: [Body is
null]] sent to: Endpoint[direct://testRoute2] took: 0 ms.
Route 3
ID-UKDB1764398-61884-1376310614400-0-2 exchange Exchange[Message: [Body is
null]] sent to: Endpoint[direct://testRoute3] took: 200 ms.
ID-UKDB1764398-61884-1376310614400-0-2 exchange Exchange[Message: [Body is
null]] sent to: Endpoint[direct://testRouteTest] took: 530 ms.
*ID-UKDB1764398-61884-1376310614400-0-2 exchange Exchange[Message: [Body is
null]] sent to: Endpoint[direct://testRouteTest] took: 530 ms.*


package com.dnb.core.integration.utils.eip;

import java.util.EventObject;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.management.event.ExchangeSentEvent;
import org.apache.camel.support.EventNotifierSupport;
import org.junit.Test;

/**
 * @author McBennettP
 *
 * I just created this test case to post to the Camel user list - looks like
 * a bug to me...!?
 */
public class SentEventTest {
	@Test
	public void testCamel() throws Exception {
        CamelContext context = new DefaultCamelContext();
        
        context.addRoutes(new RouteBuilder() { 
            public void configure() {
                from("direct://testRoute1")
                .routeId("direct://testRoute1")
                .process(new Processor() {
                	public void process(Exchange exchange) {
                		System.out.println("Route 1");
                		try { Thread.sleep(300); } catch (InterruptedException e)
{ }
                	};
                });
                
                from("direct://testRoute2")
                .routeId("direct://testRoute2")
                .process(new Processor() {
                	public void process(Exchange exchange) {
                		System.out.println("Route 2");
                	};
                });
                
                from("direct://testRoute3")
                .routeId("direct://testRoute3")
                .process(new Processor() {
                	public void process(Exchange exchange) {
                		System.out.println("Route 3");
                		try { Thread.sleep(200); } catch (InterruptedException e)
{ }
                	};
                });
                
                from("direct://testRouteTest")
                .routeId("direct://testRouteTest")
                .to("direct://testRoute1")
                .to("direct://testRoute2")
                .to("direct://testRoute3");
            }
        });

        context.getManagementStrategy().addEventNotifier(
        		new EventNotifierSupport() {
        			@Override
        		    public void notify(final EventObject event) throws Exception {
        				final ExchangeSentEvent sent = (ExchangeSentEvent) event;
        				System.out.println(sent);
        		    }
        		 
        		    public boolean isEnabled(final EventObject event) {
        		        return (event instanceof ExchangeSentEvent);
        		    }
        		 
        		    protected void doStart() throws Exception {
        		    }
        		 
        		    protected void doStop() throws Exception {
        		    }
        		});
        
        context.start();
        ProducerTemplate producer = context.createProducerTemplate();
        Exchange testExchange = new DefaultExchange(context);
        producer.send("direct://testRouteTest", testExchange);
        context.stop();
	}
}



--
View this message in context: http://camel.465427.n5.nabble.com/Bug-with-addEventNotifier-fires-two-exchange-sent-events-for-each-Exchange-sent-tp5737086p5737143.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Mime
View raw message