...
Tip |
---|
Favor using Netty as Netty is a much more active maintained and popular project than Apache Mina currently is |
Info |
---|
Be careful with sync=false on consumer endpoints. Since camel-mina2 all consumer exchanges are InOut. This is different to camel-mina. |
Maven users will need to add the following dependency to their pom.xml
for this component:
Code Block |
---|
|
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mina2</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
|
URI format
Code Block |
---|
mina2:tcp://hostname[:port][?options]
mina2:udp://hostname[:port][?options]
mina2:vm://hostname[:port][?options]
|
...
You can append query options to the URI in the following format, ?option=value&option=value&...
Options
Div |
---|
class | confluenceTableSmall |
---|
|
Wiki Markup |
---|
{div:class=confluenceTableSmall}
|| Option || Default Value || Description ||
| {{codec}} | {{null}} | You can refer to a named {{ProtocolCodecFactory}} instance in your [Registry] such as your Spring {{ApplicationContext}}, which is then used for the marshalling. |
| {{disconnect}} | {{false}} | Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer. |
| {{textline}} | {{false}} | Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is {{false}}, then Object Serialization is assumed over TCP. |
| {{textlineDelimiter}} | {{DEFAULT}} | Only used for TCP and if *textline=true*. Sets the text line delimiter to use. Possible values are: {{DEFAULT}}, {{AUTO}}, {{WINDOWS}}, {{UNIX}} or {{MAC}}. If none provided, Camel will use {{DEFAULT}}. This delimiter is used to mark the end of text. |
| {{sync}} | {{true}} | Setting to set endpoint as one-way or request-response. |
| {{lazySessionCreation}} | {{true}} | Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started. |
| {{timeout}} | {{30000}} | You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds. The timeout is only used for Mina producer. |
| {{encoding}} | _JVM Default_ | You can configure the encoding (a [charset name|http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/Charset.html]) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the [JVM default Charset|http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/Charset.html#defaultCharset()]. |
| {{transferExchange}} | {{false}} | Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are _serializable_. Camel will exclude any non-serializable objects and log it at {{WARN}} level. |
| {{minaLogger}} | {{false}} | You can enable the Apache MINA logging filter. Apache MINA uses {{slf4j}} logging at {{INFO}} level to log all input and output. |
| {{filters}} | {{null}} | You can set a list of [Mina IoFilters|http://mina.apache.org/iofilter.html] to register. The {{filters}} can be specified as a comma-separate list of bean references (e.g. {{\#filterBean1,#filterBean2}}) where each bean must be of type {{Option | Default Value | Description |
---|
codec
| null
| You can refer to a named ProtocolCodecFactory instance in your Registry such as your Spring ApplicationContext , which is then used for the marshalling. | disconnect
| false
| Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer. | textline
| false
| Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false , then Object Serialization is assumed over TCP. | textlineDelimiter
| DEFAULT
| Only used for TCP and if textline=true. Sets the text line delimiter to use. Possible values are: DEFAULT , AUTO , WINDOWS , UNIX or MAC . If none provided, Camel will use DEFAULT . This delimiter is used to mark the end of text. | sync
| true
| Setting to set endpoint as one-way or request-response. | lazySessionCreation
| true
| Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started. | timeout
| 30000
| You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds. The timeout is only used for Mina producer. | encoding
| JVM Default | You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset. | transferExchange
| false
| Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. | minaLogger
| false
| You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output. | filters
| null
| You can set a list of Mina IoFilters to register. The filters can be specified as a comma-separate list of bean references (e.g. #filterBean1,#filterBean2 ) where each bean must be of type |
org.apache.mina.common.IoFilter
|
}}. |
| {{encoderMaxLineLength}} | {{\-1}} | Set the textline protocol encoder max line length. By default the default value of Mina itself is used which are {{. | encoderMaxLineLength
| -1
| Set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE |
}}. |
| {{decoderMaxLineLength}} | {{\-1}} | Set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024. |
| {{maximumPoolSize}} | 16 | Number of worker threads in the worker pool for TCP and UDP (UDP requires *Camel . | decoderMaxLineLength
| -1
| Set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024. | maximumPoolSize
| 16 | Number of worker threads in the worker pool for TCP and UDP (UDP requires Camel 2.11.3/2.12.2 |
* |
| {{allowDefaultCodec}} | {{true}} | The mina component installs a default codec if both, {{codec}} is {{null}} and {{textline}} is {{false}}. Setting {{allowDefaultCodec}} to {{false}} prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter. |
| {{disconnectOnNoReply}} | {{true}} | If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back. |
| {{noReplyLogLevel}} | {{WARN}} | If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back. Values are: {{FATAL, ERROR, INFO, DEBUG, OFF}}. |
| {{orderedThreadPoolExecutor}} | {{true}} | Whether to use ordered thread pool, to ensure events are processed orderly on the same channel. |
| {{sslContextParameters}} | {{null}} | SSL configuration using an {{ | allowDefaultCodec
| true
| The mina component installs a default codec if both, codec is null and textline is false . Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter. | disconnectOnNoReply
| true
| If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back. | noReplyLogLevel
| WARN
| If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back. Values are: FATAL, ERROR, INFO, DEBUG, OFF . | orderedThreadPoolExecutor
| true
| Whether to use ordered thread pool, to ensure events are processed orderly on the same channel. | sslContextParameters
| null
| SSL configuration using an org.apache.camel.util.jsse.SSLContextParameters |
}} [ ]. |
| {{autoStartTls}} | {{true}} | Whether to auto start SSL handshake. |
{div}. | autoStartTls
| true
| Whether to auto start SSL handshake. | cachedAddress | true | Camel 2.14: Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network. | clientMode | false | Camel 2.15: Consumer only. If the clientMode is true, mina consumer will connect the address as a TCP client. |
|
Using a custom codec
See the Mina how to write your own codec. To use your custom codec with camel-mina
, you should register your codec in the Registry; for example, by creating a bean in the Spring XML file. Then use the codec
option to specify the bean ID of your codec. See HL7 that has a custom codec.
...
In this sample, Camel exposes a service that listens for TCP connections on port 6200. We use the textline codec. In our route, we create a Mina consumer endpoint that listens on port 6200:
Code Block |
---|
from("mina2:tcp://localhost:" + port1 + "?textline=true&sync=false").to("mock:result");
|
As the sample is part of a unit test, we test it by sending some data to it on port 6200.
Code Block |
---|
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedBodiesReceived("Hello World");
template.sendBody("mina2:tcp://localhost:" + port1 + "?textline=true&sync=false", "Hello World");
assertMockEndpointsSatisfied();
|
...
In the next sample, we have a more common use case where we expose a TCP service on port 6201 also use the textline codec. However, this time we want to return a response, so we set the sync
option to true
on the consumer.
Code Block |
---|
from("mina2:tcp://localhost:" + port2 + "?textline=true&sync=true").process(new Processor() {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
exchange.getOut().setBody("Bye " + body);
}
});
|
Then we test the sample by sending some data and retrieving the response using the template.requestBody()
method. As we know the response is a String
, we cast it to String
and can assert that the response is, in fact, something we have dynamically set in our processor code logic.
Code Block |
---|
String response = (String)template.requestBody("mina2:tcp://localhost:" + port2 + "?textline=true&sync=true", "World");
assertEquals("Bye World", response);
|
...
Spring DSL can, of course, also be used for Mina MINA. In the sample below we expose a TCP server on port 5555:
Code Block |
---|
|
<route>
<from uri="mina2:tcp://localhost:5555?textline=true"/>
<to uri="bean:myTCPOrderHandler"/>
</route>
|
In the route above, we expose a TCP server on port 5555 using the textline codec. We let the Spring bean with ID, myTCPOrderHandler
, handle the request and return a reply. For instance, the handler bean could be implemented as follows:
Code Block |
---|
|
public String handleOrder(String payload) {
...
return "Order: OK"
}
|
...
For instance, the example below will close the session after it has written the bye
message back to the client:
Code Block |
---|
|
from("mina2:tcp://localhost:8080?sync=true&textline=true").process(new Processor() {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
exchange.getOut().setBody("Bye " + body);
exchange.getOut().setHeader(Mina2Constants.MINA_CLOSE_SESSION_WHEN_COMPLETE, true);
}
});
|
...
Filters permit you to use some Mina Filters, such as SslFilter
. You can also implement some customized filters. Please note that codec
and logger
are also implemented as Mina filters of type, IoFilter
. Any filters you may define are appended to the end of the filter chain; that is, after codec
and logger
.
Include Page |
---|
| Endpoint See Also |
---|
| Endpoint See Also |
---|
|