Search in sources :

Example 1 with ConsumerCache

use of org.apache.camel.impl.ConsumerCache in project camel by apache.

the class DefaultManagementLifecycleStrategy method getManagedObjectForService.

@SuppressWarnings("unchecked")
private Object getManagedObjectForService(CamelContext context, Service service, Route route) {
    // skip channel, UoW and dont double wrap instrumentation
    if (service instanceof Channel || service instanceof UnitOfWork || service instanceof InstrumentationProcessor) {
        return null;
    }
    // skip non managed services
    if (service instanceof NonManagedService) {
        return null;
    }
    Object answer = null;
    if (service instanceof ManagementAware) {
        return ((ManagementAware<Service>) service).getManagedObject(service);
    } else if (service instanceof Tracer) {
        // special for tracer
        Tracer tracer = (Tracer) service;
        ManagedTracer mt = managedTracers.get(tracer);
        if (mt == null) {
            mt = new ManagedTracer(context, tracer);
            mt.init(getManagementStrategy());
            managedTracers.put(tracer, mt);
        }
        return mt;
    } else if (service instanceof BacklogTracer) {
        // special for backlog tracer
        BacklogTracer backlogTracer = (BacklogTracer) service;
        ManagedBacklogTracer mt = managedBacklogTracers.get(backlogTracer);
        if (mt == null) {
            mt = new ManagedBacklogTracer(context, backlogTracer);
            mt.init(getManagementStrategy());
            managedBacklogTracers.put(backlogTracer, mt);
        }
        return mt;
    } else if (service instanceof BacklogDebugger) {
        // special for backlog debugger
        BacklogDebugger backlogDebugger = (BacklogDebugger) service;
        ManagedBacklogDebugger md = managedBacklogDebuggers.get(backlogDebugger);
        if (md == null) {
            md = new ManagedBacklogDebugger(context, backlogDebugger);
            md.init(getManagementStrategy());
            managedBacklogDebuggers.put(backlogDebugger, md);
        }
        return md;
    } else if (service instanceof DataFormat) {
        answer = getManagementObjectStrategy().getManagedObjectForDataFormat(context, (DataFormat) service);
    } else if (service instanceof Producer) {
        answer = getManagementObjectStrategy().getManagedObjectForProducer(context, (Producer) service);
    } else if (service instanceof Consumer) {
        answer = getManagementObjectStrategy().getManagedObjectForConsumer(context, (Consumer) service);
    } else if (service instanceof Processor) {
        // special for processors as we need to do some extra work
        return getManagedObjectForProcessor(context, (Processor) service, route);
    } else if (service instanceof ThrottlingInflightRoutePolicy) {
        answer = new ManagedThrottlingInflightRoutePolicy(context, (ThrottlingInflightRoutePolicy) service);
    } else if (service instanceof ThrottlingExceptionRoutePolicy) {
        answer = new ManagedThrottlingExceptionRoutePolicy(context, (ThrottlingExceptionRoutePolicy) service);
    } else if (service instanceof ConsumerCache) {
        answer = new ManagedConsumerCache(context, (ConsumerCache) service);
    } else if (service instanceof ProducerCache) {
        answer = new ManagedProducerCache(context, (ProducerCache) service);
    } else if (service instanceof DefaultEndpointRegistry) {
        answer = new ManagedEndpointRegistry(context, (DefaultEndpointRegistry) service);
    } else if (service instanceof TypeConverterRegistry) {
        answer = new ManagedTypeConverterRegistry(context, (TypeConverterRegistry) service);
    } else if (service instanceof RestRegistry) {
        answer = new ManagedRestRegistry(context, (RestRegistry) service);
    } else if (service instanceof InflightRepository) {
        answer = new ManagedInflightRepository(context, (InflightRepository) service);
    } else if (service instanceof AsyncProcessorAwaitManager) {
        answer = new ManagedAsyncProcessorAwaitManager(context, (AsyncProcessorAwaitManager) service);
    } else if (service instanceof RuntimeEndpointRegistry) {
        answer = new ManagedRuntimeEndpointRegistry(context, (RuntimeEndpointRegistry) service);
    } else if (service instanceof StreamCachingStrategy) {
        answer = new ManagedStreamCachingStrategy(context, (StreamCachingStrategy) service);
    } else if (service instanceof EventNotifier) {
        answer = getManagementObjectStrategy().getManagedObjectForEventNotifier(context, (EventNotifier) service);
    } else if (service instanceof TransformerRegistry) {
        answer = new ManagedTransformerRegistry(context, (TransformerRegistry) service);
    } else if (service instanceof ValidatorRegistry) {
        answer = new ManagedValidatorRegistry(context, (ValidatorRegistry) service);
    } else if (service instanceof RuntimeCamelCatalog) {
        answer = new ManagedRuntimeCamelCatalog(context, (RuntimeCamelCatalog) service);
    } else if (service != null) {
        // fallback as generic service
        answer = getManagementObjectStrategy().getManagedObjectForService(context, service);
    }
    if (answer != null && answer instanceof ManagedService) {
        ManagedService ms = (ManagedService) answer;
        ms.setRoute(route);
        ms.init(getManagementStrategy());
    }
    return answer;
}
Also used : ManagedAsyncProcessorAwaitManager(org.apache.camel.management.mbean.ManagedAsyncProcessorAwaitManager) UnitOfWork(org.apache.camel.spi.UnitOfWork) CamelInternalProcessor(org.apache.camel.processor.CamelInternalProcessor) Processor(org.apache.camel.Processor) InflightRepository(org.apache.camel.spi.InflightRepository) ManagedInflightRepository(org.apache.camel.management.mbean.ManagedInflightRepository) ManagedTracer(org.apache.camel.management.mbean.ManagedTracer) ManagedRestRegistry(org.apache.camel.management.mbean.ManagedRestRegistry) ManagedThrottlingInflightRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingInflightRoutePolicy) RestRegistry(org.apache.camel.spi.RestRegistry) ManagedRestRegistry(org.apache.camel.management.mbean.ManagedRestRegistry) ManagedValidatorRegistry(org.apache.camel.management.mbean.ManagedValidatorRegistry) DefaultValidatorRegistry(org.apache.camel.impl.DefaultValidatorRegistry) ValidatorRegistry(org.apache.camel.spi.ValidatorRegistry) ManagedRuntimeCamelCatalog(org.apache.camel.management.mbean.ManagedRuntimeCamelCatalog) DefaultEndpointRegistry(org.apache.camel.impl.DefaultEndpointRegistry) ManagedConsumerCache(org.apache.camel.management.mbean.ManagedConsumerCache) ManagedProducerCache(org.apache.camel.management.mbean.ManagedProducerCache) ProducerCache(org.apache.camel.impl.ProducerCache) ManagedStreamCachingStrategy(org.apache.camel.management.mbean.ManagedStreamCachingStrategy) ThrottlingInflightRoutePolicy(org.apache.camel.impl.ThrottlingInflightRoutePolicy) ManagedThrottlingInflightRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingInflightRoutePolicy) ManagedEndpointRegistry(org.apache.camel.management.mbean.ManagedEndpointRegistry) Consumer(org.apache.camel.Consumer) ManagedTypeConverterRegistry(org.apache.camel.management.mbean.ManagedTypeConverterRegistry) TypeConverterRegistry(org.apache.camel.spi.TypeConverterRegistry) EventNotifier(org.apache.camel.spi.EventNotifier) DataFormat(org.apache.camel.spi.DataFormat) ManagedThrottlingExceptionRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingExceptionRoutePolicy) DefaultTransformerRegistry(org.apache.camel.impl.DefaultTransformerRegistry) ManagedTransformerRegistry(org.apache.camel.management.mbean.ManagedTransformerRegistry) TransformerRegistry(org.apache.camel.spi.TransformerRegistry) ManagedService(org.apache.camel.management.mbean.ManagedService) NonManagedService(org.apache.camel.NonManagedService) ManagedBacklogTracer(org.apache.camel.management.mbean.ManagedBacklogTracer) BacklogTracer(org.apache.camel.processor.interceptor.BacklogTracer) ManagedBacklogDebugger(org.apache.camel.management.mbean.ManagedBacklogDebugger) ManagedBacklogTracer(org.apache.camel.management.mbean.ManagedBacklogTracer) Tracer(org.apache.camel.processor.interceptor.Tracer) BacklogTracer(org.apache.camel.processor.interceptor.BacklogTracer) ManagedTracer(org.apache.camel.management.mbean.ManagedTracer) Channel(org.apache.camel.Channel) ManagedAsyncProcessorAwaitManager(org.apache.camel.management.mbean.ManagedAsyncProcessorAwaitManager) AsyncProcessorAwaitManager(org.apache.camel.spi.AsyncProcessorAwaitManager) ManagedRuntimeCamelCatalog(org.apache.camel.management.mbean.ManagedRuntimeCamelCatalog) RuntimeCamelCatalog(org.apache.camel.catalog.RuntimeCamelCatalog) ManagedTypeConverterRegistry(org.apache.camel.management.mbean.ManagedTypeConverterRegistry) Producer(org.apache.camel.Producer) ManagedValidatorRegistry(org.apache.camel.management.mbean.ManagedValidatorRegistry) ManagedRuntimeEndpointRegistry(org.apache.camel.management.mbean.ManagedRuntimeEndpointRegistry) RuntimeEndpointRegistry(org.apache.camel.spi.RuntimeEndpointRegistry) ManagedInflightRepository(org.apache.camel.management.mbean.ManagedInflightRepository) ConsumerCache(org.apache.camel.impl.ConsumerCache) ManagedConsumerCache(org.apache.camel.management.mbean.ManagedConsumerCache) ManagedTransformerRegistry(org.apache.camel.management.mbean.ManagedTransformerRegistry) ManagedProducerCache(org.apache.camel.management.mbean.ManagedProducerCache) ManagementAware(org.apache.camel.spi.ManagementAware) StreamCachingStrategy(org.apache.camel.spi.StreamCachingStrategy) ManagedStreamCachingStrategy(org.apache.camel.management.mbean.ManagedStreamCachingStrategy) NonManagedService(org.apache.camel.NonManagedService) ManagedBacklogDebugger(org.apache.camel.management.mbean.ManagedBacklogDebugger) BacklogDebugger(org.apache.camel.processor.interceptor.BacklogDebugger) ManagedBacklogTracer(org.apache.camel.management.mbean.ManagedBacklogTracer) ManagedRuntimeEndpointRegistry(org.apache.camel.management.mbean.ManagedRuntimeEndpointRegistry) ThrottlingExceptionRoutePolicy(org.apache.camel.impl.ThrottlingExceptionRoutePolicy) ManagedThrottlingExceptionRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingExceptionRoutePolicy)

Example 2 with ConsumerCache

use of org.apache.camel.impl.ConsumerCache in project camel by apache.

the class PollEnricher method doStart.

protected void doStart() throws Exception {
    if (consumerCache == null) {
        // create consumer cache if we use dynamic expressions for computing the endpoints to poll
        if (cacheSize < 0) {
            consumerCache = new EmptyConsumerCache(this, camelContext);
            LOG.debug("PollEnrich {} is not using ConsumerCache", this);
        } else if (cacheSize == 0) {
            consumerCache = new ConsumerCache(this, camelContext);
            LOG.debug("PollEnrich {} using ConsumerCache with default cache size", this);
        } else {
            consumerCache = new ConsumerCache(this, camelContext, cacheSize);
            LOG.debug("PollEnrich {} using ConsumerCache with cacheSize={}", this, cacheSize);
        }
    }
    ServiceHelper.startServices(consumerCache, aggregationStrategy);
}
Also used : EmptyConsumerCache(org.apache.camel.impl.EmptyConsumerCache) EmptyConsumerCache(org.apache.camel.impl.EmptyConsumerCache) ConsumerCache(org.apache.camel.impl.ConsumerCache)

Example 3 with ConsumerCache

use of org.apache.camel.impl.ConsumerCache in project camel by apache.

the class ManagedConsumerCacheHitsTest method testManageConsumerCache.

public void testManageConsumerCache() throws Exception {
    // JMX tests dont work well on AIX CI servers (hangs them)
    if (isPlatform("aix")) {
        return;
    }
    // always register services in JMX so we can enlist our consumer template/cache
    context.getManagementStrategy().getManagementAgent().setRegisterAlways(true);
    ConsumerCache cache = new ConsumerCache(this, context);
    context.addService(cache);
    template.sendBody("seda:a", "Hello World");
    Exchange out = cache.getConsumer(context.getEndpoint("seda:a")).receive(3000);
    assertNotNull("Should got an exchange", out);
    assertEquals("Hello World", out.getIn().getBody());
    // get the stats for the route
    MBeanServer mbeanServer = getMBeanServer();
    Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=services,*"), null);
    List<ObjectName> list = new ArrayList<ObjectName>(set);
    ObjectName on = null;
    for (ObjectName name : list) {
        if (name.getCanonicalName().contains("ConsumerCache")) {
            on = name;
            break;
        }
    }
    assertNotNull("Should have found ConsumerCache", on);
    Integer max = (Integer) mbeanServer.getAttribute(on, "MaximumCacheSize");
    assertEquals(1000, max.intValue());
    Integer current = (Integer) mbeanServer.getAttribute(on, "Size");
    assertEquals(1, current.intValue());
    // since we only send 1 message we should have 0 hits and 1 miss
    Long hits = (Long) mbeanServer.getAttribute(on, "Hits");
    assertEquals(0, hits.longValue());
    Long misses = (Long) mbeanServer.getAttribute(on, "Misses");
    assertEquals(1, misses.longValue());
    // send more
    // ---------
    template.sendBody("seda:b", "Hello World");
    template.sendBody("seda:c", "Hello World");
    out = cache.getConsumer(context.getEndpoint("seda:b")).receive(3000);
    assertNotNull(out);
    out = cache.getConsumer(context.getEndpoint("seda:c")).receive(3000);
    assertNotNull(out);
    // we have only consumed from 3 different endpoints so all is misses
    hits = (Long) mbeanServer.getAttribute(on, "Hits");
    assertEquals(0, hits.longValue());
    misses = (Long) mbeanServer.getAttribute(on, "Misses");
    assertEquals(3, misses.longValue());
    // send to same endpoints
    // ----------------------
    template.sendBody("seda:a", "Bye World");
    template.sendBody("seda:b", "Bye World");
    out = cache.getConsumer(context.getEndpoint("seda:a")).receive(3000);
    assertNotNull(out);
    out = cache.getConsumer(context.getEndpoint("seda:b")).receive(3000);
    assertNotNull(out);
    // we should have hits now
    hits = (Long) mbeanServer.getAttribute(on, "Hits");
    assertEquals(2, hits.longValue());
    misses = (Long) mbeanServer.getAttribute(on, "Misses");
    assertEquals(3, misses.longValue());
    // reset statistics
    // ----------------
    mbeanServer.invoke(on, "resetStatistics", null, null);
    hits = (Long) mbeanServer.getAttribute(on, "Hits");
    assertEquals(0, hits.longValue());
    misses = (Long) mbeanServer.getAttribute(on, "Misses");
    assertEquals(0, misses.longValue());
}
Also used : Exchange(org.apache.camel.Exchange) ArrayList(java.util.ArrayList) ConsumerCache(org.apache.camel.impl.ConsumerCache) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName)

Example 4 with ConsumerCache

use of org.apache.camel.impl.ConsumerCache in project camel by apache.

the class ManagedConsumerCacheTest method testManageConsumerCache.

public void testManageConsumerCache() throws Exception {
    // JMX tests dont work well on AIX CI servers (hangs them)
    if (isPlatform("aix")) {
        return;
    }
    // always register services in JMX so we can enlist our consumer template/cache
    context.getManagementStrategy().getManagementAgent().setRegisterAlways(true);
    ConsumerCache cache = new ConsumerCache(this, context);
    context.addService(cache);
    template.sendBody("direct:start", "Hello World");
    Endpoint endpoint = context.getEndpoint("seda:queue");
    PollingConsumer consumer = cache.getConsumer(endpoint);
    Exchange out = consumer.receive(3000);
    assertNotNull("Should got an exchange", out);
    assertEquals("Hello World", out.getIn().getBody());
    // get the stats for the route
    MBeanServer mbeanServer = getMBeanServer();
    Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=services,*"), null);
    List<ObjectName> list = new ArrayList<ObjectName>(set);
    ObjectName on = null;
    for (ObjectName name : list) {
        if (name.getCanonicalName().contains("ConsumerCache")) {
            on = name;
            break;
        }
    }
    assertNotNull("Should have found ConsumerCache", on);
    Integer max = (Integer) mbeanServer.getAttribute(on, "MaximumCacheSize");
    assertEquals(1000, max.intValue());
    Integer current = (Integer) mbeanServer.getAttribute(on, "Size");
    assertEquals(1, current.intValue());
    String source = (String) mbeanServer.getAttribute(on, "Source");
    assertNotNull(source);
    assertTrue(source.contains("testManageConsumerCache"));
    // purge
    mbeanServer.invoke(on, "purge", null, null);
    current = (Integer) mbeanServer.getAttribute(on, "Size");
    assertEquals(0, current.intValue());
    // stop the consumer as it was purged from the cache
    // so we need to manually stop it
    consumer.stop();
    cache.stop();
}
Also used : Exchange(org.apache.camel.Exchange) PollingConsumer(org.apache.camel.PollingConsumer) Endpoint(org.apache.camel.Endpoint) ArrayList(java.util.ArrayList) ConsumerCache(org.apache.camel.impl.ConsumerCache) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName)

Aggregations

ConsumerCache (org.apache.camel.impl.ConsumerCache)4 ArrayList (java.util.ArrayList)2 MBeanServer (javax.management.MBeanServer)2 ObjectName (javax.management.ObjectName)2 Exchange (org.apache.camel.Exchange)2 Channel (org.apache.camel.Channel)1 Consumer (org.apache.camel.Consumer)1 Endpoint (org.apache.camel.Endpoint)1 NonManagedService (org.apache.camel.NonManagedService)1 PollingConsumer (org.apache.camel.PollingConsumer)1 Processor (org.apache.camel.Processor)1 Producer (org.apache.camel.Producer)1 RuntimeCamelCatalog (org.apache.camel.catalog.RuntimeCamelCatalog)1 DefaultEndpointRegistry (org.apache.camel.impl.DefaultEndpointRegistry)1 DefaultTransformerRegistry (org.apache.camel.impl.DefaultTransformerRegistry)1 DefaultValidatorRegistry (org.apache.camel.impl.DefaultValidatorRegistry)1 EmptyConsumerCache (org.apache.camel.impl.EmptyConsumerCache)1 ProducerCache (org.apache.camel.impl.ProducerCache)1 ThrottlingExceptionRoutePolicy (org.apache.camel.impl.ThrottlingExceptionRoutePolicy)1 ThrottlingInflightRoutePolicy (org.apache.camel.impl.ThrottlingInflightRoutePolicy)1