下面就把camel部署mina:tcp时候遇到一些问题为大家做答,并贴上代码供大家学习!
很多人在部署好后,从客户端发来消息就会报这样的错误:
org.apache.mina.common.BufferDataException dataLength Hexdump camel
我也遇到了,然后去网上一找,很多人提问,但没有一个人真正得到了答案的,回答的人都是以“不知道你要做什么,不知道你这个是在什么环境下部署的”。做答案,那我做为全国第一个把我这两天的研究结果发布这在上面,希望对大家有帮助;
这个问题最先以为是camle的问题,于调试其源代码,不得解,然后看其文档,发现"mina:tcp://"+host+":"+port+"?textline=true&sync=true"
是textline的问题,为什么呢,是因为在mina处有个过滤器,如果不这样设置,在做message的类型转换是就会报错,于加它加上,然后
再运行
,发现不现报错了,但是没有收到任何结果,再查其原因,发现必须在客户端每条发送的数据后加一个回车符才行,为什么呢,因为这个过滤器要收到一个回符,才
认为接收完成,才会做下一步处理。
到这里如果你的需求可以让你的每条message都加一个回车符,那么不用改源代码也可以满足你的需求了。但我的要求不是这么低的,于再研究。
到最后把问题盯在了mina的TextLineDecoder这个类上,
如下红色部分,你只需加这一点,你的消息就可以不用再跟上回车符也可以让camel接收到消息了,哈哈,当然这只是最基本的做法了。本人还有很多需求,都要改源代码的。有时间再贴出来和大家分享了!
实际的程序运行例子参照
http://wangleifire.iteye.com/category/58864我这里就不做ctrl+c ctrl+v了!
private void decodeAuto(Context ctx, ByteBuffer in, ProtocolDecoderOutput out)
throws CharacterCodingException {
int matchCount = ctx.getMatchCount();
// Try to find a match
int oldPos = in.position();
int oldLimit = in.limit();
while (in.hasRemaining()) {
byte b = in.get();
boolean matched = false;
switch (b) {
case '\r':
// Might be Mac, but we don't auto-detect Mac EOL
// to avoid confusion.
matchCount++;
break;
case '\n':
// UNIX
matchCount++;
matched = true;
break;
default:
matchCount = 0;
}
if (matched || !in.hasRemaining()
) {
// Found a match.
int pos = in.position();
in.limit(pos);
in.position(oldPos);
ctx.append(in);
in.limit(oldLimit);
in.position(pos);
if (ctx.getOverflowPosition() == 0) {
ByteBuffer buf = ctx.getBuffer();
buf.flip();
buf.limit(buf.limit() - matchCount);
try {
out.write(buf.getString(ctx.getDecoder()));
} finally {
buf.clear();
}
} else {
int overflowPosition = ctx.getOverflowPosition();
ctx.reset();
throw new BufferDataException(
"Line is too long: " + overflowPosition);
}
oldPos = pos;
matchCount = 0;
}
}
// Put remainder to buf.
in.position(oldPos);
ctx.append(in);
ctx.setMatchCount(matchCount);
}
分享到:
相关推荐
1: Meet Camel - FREE 2: Routing with Camel - AVAILABLE Part 2 Core Camel 3: Transforming Data with Camel - AVAILABLE 4: Using Beans with Camel - AVAILABLE 5: Error Handling - AVAILABLE 6:...
activemq-camel-5.5.0.jar
WildFly-WLS-Camel-JMS Camel-WildFly-WebLogic 博客文章的来源: :
标签:apache-camel-1.3.0.tar.gz,apache,camel,1.3.0.tar.gz包下载,依赖包
演示如何在 Spring Boot 中部署 Camel 并使用各种集成技术与 Docker 集成 项目概况 该项目演示了 Apache Camel 在 Spring Boot 和 Docker 中的集成功能。 Camel 上下文通过 Camel Spring Boot 组件在 Spring Boot ...
在命名空间中创建或更改名为camel-config的ConfigMap(包含名为application.properties的属性)后,将触发应用程序上下文刷新事件,并且日志将反映新的配置。 样品ConfigMap ( sample-configmap.yml )被包含在该...
babel-camel-lambda-sample 发现 babel-camel-lambda 的示例(用于 Apache Camel 的改进的 Java DSL) 在此示例中,您假设定义一个路由接收一个包含金额的字符串合计金额根据它是否为正数将总和发送到媒体路由应该在...
Play 中的 Camel + Kafka + Akka 示例 创建 docker 镜像 sbt docker:publishLocal 或者,将图像发布到 docker.io: # will need to do docker login first docker:publish 运行容器 docker run -d --name ...
@GrabResolver(name=':groovy-camel-helper', root='http://www.wingnest.com/mvn-repo/') @Grab('com.wingnest.groovy:groovy-camel-helper:1.0-M1-SNAPSHOT') import static ...
SpringBoot Rest Camel这是一个基于SpringBoot Apache-Camel Rest组件的示例凝乳应用程序。 系统中用于项目设置的必需项:Maven Java 8(如果您具有Java 7,则可以在maven pom中更改source和target属性) 基于H2数据...
骆驼CDI快速入门本示例说明如何使用CDI在Java容器中使用Camel来配置... fabric8/sti-java-jboss-jdk8:1.0.6 fabric8/camel-cdi在os3中运行oc new-app --strategy=source fabric8/sti-java-jboss-jdk8:1.0.6~https://git
angular-gs-to-camel-case 将snake_cased 字符串变成camelCased 字符串 安装 bower install angular-gs-to-camel-case 使用 在您的应用程序中包含该包: angular . module ( 'app' , [ 'gs.to-camel-case' ] ) ;...
apache-camel 开发sample Apache Camel是一个基于规则路由和中介引擎,提供企业集成模式的Java对象(POJO)的实现,通过应用程序接口(或称为陈述式的Java领域特定语言(DSL))来配置路由和中介的规则。领域特定语言...
标签:apache-camel-1.6.0.tar.gz,apache,camel,1.6.0.tar.gz包下载,依赖包
标签:apache-camel-1.2.0-sources.jar,apache,camel,1.2.0,sources,jar包下载,依赖包
标签:apache-camel-2.10.0-src.zip,apache,camel,2.10.0,src.zip包下载,依赖包
该应用程序利用Spring 批注通过类路径上的src / main / resources / spring / camel-context.xml文件加载Camel Context定义。 重要的 该快速入门可以在2种模式下运行:在您的计算机和Kubernetes / OpenShift群集上...
projeto-camel-alura:雌性骆驼
Processor-and-Exchange-CAMEL-demo-spring-boot:使用骆驼工具对用户处理器和Exchange内容进行分配
标签:apache-camel-2.7.5.zip,apache,camel,2.7.5.zip包下载,依赖包