Hi

I logged a ticket and are working on to add this in camel 3
https://issues.apache.org/jira/browse/CAMEL-13199

On Thu, Feb 14, 2019 at 9:46 AM Claus Ibsen <[email protected]> wrote:
>
> Hi
>
> Yeah this is currently not supported, you are welcome to log a JIRA ticket
>
> On Tue, Feb 12, 2019 at 10:58 PM Garner, Kevin
> <[email protected]> wrote:
> >
> > We're using EventNotifier and ExchangeSentEvent to log timing of certain 
> > direct:// routes and we've run into a problem when using @Produce instead 
> > of ProducerTemplate.
> >
> > When sending exchange to producer template, ExchangeSentEvent is fired 
> > after exchange is sent. Same when it's part of a larger route. Not so much 
> > with @Produce.
> >
> > Any guidance on how to use @Produce but still trigger the events?
> >
> > I've got a unit test below - notifyProxy fails, but the other cases pass. 
> > Camel 2.23.0
> >
> > Thanks,
> > Kevin
> >
> >
> >
> >
> >
> >
> >
> > import static org.hamcrest.CoreMatchers.equalTo;
> > import static org.hamcrest.CoreMatchers.notNullValue;
> > import static org.junit.Assert.assertThat;
> > import static org.junit.Assert.assertTrue;
> >
> > import java.util.EventObject;
> >
> > import org.apache.camel.Body;
> > import org.apache.camel.CamelContext;
> > import org.apache.camel.Exchange;
> > import org.apache.camel.Produce;
> > import org.apache.camel.ProducerTemplate;
> > import org.apache.camel.builder.RouteBuilder;
> > import org.apache.camel.impl.DefaultExchange;
> > import org.apache.camel.management.event.ExchangeSentEvent;
> > import org.apache.camel.spring.javaconfig.CamelConfiguration;
> > import org.apache.camel.support.EventNotifierSupport;
> > import org.apache.camel.test.spring.CamelSpringRunner;
> > import org.apache.camel.util.EndpointHelper;
> > import org.apache.camel.util.ServiceHelper;
> > import org.junit.Before;
> > import org.junit.Test;
> > import org.junit.runner.RunWith;
> > import org.springframework.beans.factory.annotation.Autowired;
> > import org.springframework.context.annotation.Bean;
> > import org.springframework.context.annotation.Configuration;
> > import org.springframework.test.context.ContextConfiguration;
> >
> > @RunWith(CamelSpringRunner.class)
> > @ContextConfiguration(classes = { CamelConfiguration.class, 
> > DirectTest.TestConfig.class })
> > public class DirectTest {
> >        private static final String NAME = "Doug";
> >        private static final String EXPECTED = "Hello, 'Doug'";
> >
> >        @Produce(uri = HelloApi.ROUTE)
> >        private HelloApi helloApi;
> >
> >        @Produce(uri = HelloApi.ROUTE)
> >        private ProducerTemplate helloApiTemplate;
> >
> >        @Produce(uri = HelloApi.WRAPPED_ROUTE)
> >        private HelloApi helloApiWrapped;
> >
> >        @Autowired
> >        private CamelContext camelContext;
> >        private HelloSentEventNotifier eventNotifier;
> >
> >        @Before
> >        public void setup() throws Exception {
> >               assertThat(helloApi, notNullValue());
> >               assertThat(helloApiTemplate, notNullValue());
> >
> >               eventNotifier = new HelloSentEventNotifier(camelContext);
> >        }
> >
> >        @Test
> >        public void notifyTemplate() {
> >               eventNotifier.reset();
> >               Exchange e = new DefaultExchange(camelContext);
> >               e.getIn().setBody(NAME);
> >               e = helloApiTemplate.send(e);
> >               String output = e.getOut().getBody(String.class);
> >               assertThat(output, equalTo(EXPECTED));
> >               assertTrue("ExchangeSentEvent not received", 
> > eventNotifier.notified());
> >        }
> >
> >        @Test
> >        public void notifyProxy() {
> >               eventNotifier.reset();
> >               String output = helloApi.sayHello(NAME);
> >               assertThat(output, equalTo(EXPECTED));
> >               assertTrue("ExchangeSentEvent not received", 
> > eventNotifier.notified());
> >        }
> >
> >        @Test
> >        public void notifyWrappedProxy() {
> >               eventNotifier.reset();
> >               String output = helloApiWrapped.sayHello(NAME);
> >               assertThat(output, equalTo(EXPECTED));
> >               assertTrue("ExchangeSentEvent not received", 
> > eventNotifier.notified());
> >        }
> >
> >        @Configuration
> >        public static class TestConfig {
> >               @Bean
> >               public RouteBuilder builder() {
> >                      return new RouteBuilder() {
> >                            @Override
> >                            public void configure() throws Exception {
> >                                   from(HelloApi.ROUTE).process(e -> {
> >                                          String name = 
> > e.getIn().getBody(String.class);
> >                                          String output = 
> > String.format("Hello, '%s'", name);
> >                                          e.getOut().setBody(output);
> >                                   });
> >
> >                                   
> > from(HelloApi.WRAPPED_ROUTE).to(HelloApi.ROUTE);
> >                            }
> >                      };
> >               }
> >        }
> >
> >        public static interface HelloApi {
> >               public static final String ROUTE = "direct://hello";
> >               public static final String WRAPPED_ROUTE = ROUTE + "/wrapper";
> >
> >               public String sayHello(@Body String name);
> >        }
> >
> >        public static class HelloSentEventNotifier extends 
> > EventNotifierSupport {
> >               private boolean notified = false;
> >               private CamelContext camelContext;
> >
> >               public HelloSentEventNotifier(CamelContext camelContext) {
> >                      this.camelContext = camelContext;
> >                      try {
> >                            ServiceHelper.startService(this);
> >                            
> > camelContext.getManagementStrategy().addEventNotifier(this);
> >                      } catch (Exception e) {
> >                            throw new RuntimeException(e);
> >                      }
> >               }
> >
> >               @Override
> >               public void notify(EventObject event) throws Exception {
> >                      if (event instanceof ExchangeSentEvent) {
> >                            ExchangeSentEvent sentEvent = 
> > (ExchangeSentEvent)event;
> >                 if (EndpointHelper.matchEndpoint(camelContext, 
> > sentEvent.getEndpoint().getEndpointUri(), HelloApi.ROUTE)) {
> >                     notified = true;
> >                 }
> >                      }
> >               }
> >
> >               @Override
> >               public boolean isEnabled(EventObject event) {
> >                      return true;
> >               }
> >
> >               public void reset() {
> >                      notified = false;
> >               }
> >
> >               public boolean notified() {
> >                      return notified;
> >               }
> >        }
> > }
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to