Returns true if the message can be handled by the internal handler.
Internal Handler Buffering
The Anypoint Runtime Manager agent provides a simple way of implementing internal handlers with buffering support. This document explains how to implement and configure buffers for the Runtime Manager agent internal handlers.
Implement a Buffered Internal Handler
BufferedHandler Abstract Class
To implement a buffered internal handler, you need to extend the BufferedHandler<T> abstract class. The methods to overwrite are:
-
boolean canHandle(T message) -
boolean flush(Collection<T> collectionOfMessages)Provides the implementation to send the messages stored in the buffer to the external service.
Example
@Named("com.mulesoft.agent.mypublisher")
@Singleton
public class MyPublisher extends BufferedHandler<List<Metric>>
{
@Configurable(value = "mule")
String metricPrefix;
@Inject
public MyPublisher()
{
super();
}
public MyPublisher(OnOffSwitch enabledSwitch)
{
super();
this.enabledSwitch = enabledSwitch;
}
@Override
public boolean canHandle(@NotNull List<Metric> metrics)
{
// Evaluates if the message could be handled
}
@Override
public boolean flush(@NotNull Collection<List<Metric>> listOfMetrics)
{
// Send messages to external service
}
}
Configure a Buffering Internal Handler
Buffering Configuration Object
If the internal handler includes buffering support, you can configure the buffer in the mule-agent.yml file. The following table lists the available configuration parameters.
| Field | Description | Default value |
|---|---|---|
|
Buffer type. Valid values are |
|
|
Number of retries after an exception was thrown in the flush method. |
|
|
Maximum number of events to keep in buffer. |
|
|
Frequency at which the flush method will run, in milliseconds. |
|
|
Path to the buffer file. Only valid for buffers of type |
|
|
Strategy to follow when the buffer is exhausted. If not specified, the buffer will grow automatically. Valid values are |
N/A |
|
Number of threads used by the FlushThreadExecutor when the buffer is exhausted and the strategy defined by |
|
|
If true, messages will not be returned to the buffer if the flush is not successful. |
|
|
The maximum size capacity for the buffer is configured based on a number of events and not in bytes. Keep in mind that if the events are of a considerable size and you don’t set |
If you configure a DISK buffer, the agent will also instantiate an in-memory buffer in order to improve the performance of the I/O operations. This memory buffer has a default value of 10000 events and is flushed to disk every 500ms, and in batches of 10000 events each. These values are configurable through the system properties agent.disk.buffering.cache.size, agent.disk.buffering.cache.flush.frequency and agent.disk.buffering.max.flushing.size, respectively.
Flushing from disk to the external system in batches of 10000 events each and the agent.disk.buffering.max.flushing.size property are supported for Mule agent plugin versions 2.1.9 and 1.11.3 and later.
|
Sample mule-agent.yml Files
Configure Buffering in a Publisher
---
muleInstanceUniqueId: validId
organizationId: organizationId
transports:
websocket.transport:
security:
keyStorePassword: mykeystorePassword
keyStoreAlias: agent
keyStoreAliasPassword: agentpassword
rest.agent.transport:
security:
keyStorePassword: mykeystorePassword
keyStoreAlias: agent
keyStoreAliasPassword: agentpassword
port: 9997
services:
mule.agent.application.service:
enabled: true
mule.agent.domain.service:
enabled: true
mule.agent.jmx.publisher.service:
enabled: true
frequency: 15
frequencyTimeUnit: MINUTES
beans:
- beanQueryPattern: java.lang:type=Runtime
attribute: Uptime
monitorMessage: Monitoring memory up-time
- beanQueryPattern: java.lang:type=MemoryPool,*
attribute: Usage.used
monitorMessage" : Used Memory
internalHandlers:
domaindeploymentnotification.internal.message.handler:
enabled: true
applicationdeploymentnotification.internal.message.handler:
enabled: false
com.mulesoft.agent.test.buffering.jmx.internal.handler:
enabled: true
buffer:
type: DISK
retryCount: 1
flushFrequency: 10000
maximumCapacity: 30
filePath: publisher-buffer.log
externalHandlers:
applications.request.handler:
enabled: true
domains.request.handler:
enabled: true
Configure Buffering in Events Tracking
---
muleInstanceUniqueId: validId
organizationId: organizationId
transports:
websocket.transport:
security:
keyStorePassword: mykeystorePassword
keyStoreAlias: agent
keyStoreAliasPassword: agentpassword
rest.agent.transport:
security:
keyStorePassword: mykeystorePassword
keyStoreAlias: agent
keyStoreAliasPassword: agentpassword
port: 9997
services:
mule.agent.application.service:
enabled: true
mule.agent.domain.service:
enabled: true
mule.agent.jmx.publisher.service:
enabled: true
frequency: 15
frequencyTimeUnit: MINUTES
beans:
- beanQueryPattern: java.lang:type=Runtime
attribute: Uptime
monitorMessage: Monitoring memory up-time
- beanQueryPattern: java.lang:type=MemoryPool,*
attribute: Usage.used
monitorMessage" : Used Memory
internalHandlers:
domaindeploymentnotification.internal.message.handler:
enabled: true
applicationdeploymentnotification.internal.message.handler:
enabled: false
tracking.notification.internal.message.handler:
enabled: true
buffer:
type: MEMORY
retryCount: 1
flushFrequency: 10000
maximumCapacity: 30
externalHandlers:
applications.request.handler:
enabled: true
domains.request.handler:
enabled: true



