apache camel 如何调用webservice

-赵本山- 发布于 2013/09/23 14:33
阅读 3K+
收藏 3

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

    公司项目在实际运行环境中会调用其他厂家的webservice,来导入数据。各个地方提供数据源的厂家不同,使用的webservie框架也肯定各不相同(axis2,cxf等都遇到过)。

    公司最近准备做技术整合,想用apache camel做ESB来整合项目资源。看了几天camel的官网文档,只看到如何用camel做webservice,不知道如何来做客户端调用其他厂家的webservice,希望做过的大神给点思路。

加载中
0
vidy_tu
vidy_tu

bean所对应 的Consumer是个PoolConsumer,所以会一直调用。

你的服务的出发条件是什么?如果手动触发,可以在前面加个direct。

from("direct:a").to("bean:testWs").to....


触发:

template = camelContext.createProducerTemplate(producerMaxCount);
template.start();
template.send("direct:a", Exchange);

多看看Camel InAction 和Camel Manual

vidy_tu
vidy_tu
回复 @旁旁 : 不是很明白你的问题,不过Camel In Action里面有很多JMS的示例啊,你没的对的上么? FFMQ我没用过。
-赵本山-
-赵本山-
我现在用camel调用ffmq做基于jms的通信,如何让两个ffmqServer通信?现可以和本地ffmqserver通信。不知如何去和其他ffmqserver通信。请指教!
-赵本山-
-赵本山-
好的,谢了!
0
-赵本山-
-赵本山-
这个问题真的很难么?? 
-赵本山-
-赵本山-
1 别沉了!
0
typeorigin
typeorigin
这东西用的少。帮顶
0
肖俊_David
肖俊_David
需要通过javax.xml.soap自己组装  soap协议的格式 数据,转发到http地址上
-赵本山-
-赵本山-
大神,能再说的稍微具体点么?有点迷糊。。。
0
vidy_tu
vidy_tu

Camel中的endpoint和实际服务只是一个映射关系。具体的要怎么调用,你可以自己封装成一个bean来做。这样之前的代码不怎么改就可以。

客户端和服务是一样的配置,如果是服务的路由定义为from,如果是客户端路由定义是to;

具体可以参考http://camel.apache.org/spring-web-services.html



-赵本山-
-赵本山-
因为我们是调用端,也就是ws客户端。你的意思是我们原来系统中调用其他厂家ws的客户端代码保留,做为endpoint在camel中使用,然后用camel的processor做其他处理?
0
vidy_tu
vidy_tu

回复 @旁旁 : 对的,之前的代码作为一个bean接入Camel.
用Camel之前几个概念要搞清楚Component,Endpoint,Producer,Consumer;
Component我们理解过来就是协议,在一个Component可以有多个Endpoint, Endpoint在路由中体现就是URL;endpoint与对应的服务是一个映射关系,
这个服务可以是一个javabean,这时url就是bean的ID也可是一个JMS队列,这时url就是对应的队列名称,也可以是一个http服务,这是url就是对应的http地址。


Endpoint上会有三个概念:
Producer生产者,这个Producer是相对你的服务来说的,也就是说Producer会收到上一个Endpoint送过来的消息传给你的服务来来处理,
Consumer消费者,也是相对你的服务来说的。它接收你的服务处理过的消息传给下一个节点。
还有一个就是上面说的endPoint映射的服务。


它们连接起来就是 服务1 ->Consumer1 -> SendProcesser - > Producer2 -> 服务2 -> Consumer2 -> ......


processor在Camel内部是一个很重要的概念,但是它也提供了各种Component来接入各种服务。
所以其他的服务也没有必要去继承这个接口。反而还提高了Camel与业务的耦合性。
如果之前已有相关业务代码。只需要用Camel将这些service组织起来就可以。
直接form("bean:aaa?method=aaa").to("bean:ddddd?method=dddd")
中间再加些消息转换。

-赵本山-
-赵本山-
回复 @滄海一夢 : 感觉from().to()就是一个死循环。。。如何只执行一次呢????
-赵本山-
-赵本山-
回复 @滄海一夢 : 可以调用成功了,是我的环境问题。现在的问题是它会反复的轮询执行test2222方法,我再查看下怎么回事。谢谢你的提示。
-赵本山-
-赵本山-
回复 @滄海一夢 : 我的DSL中是这么写的: from("bean:testWs?method=test2222").to("log:foo"); testWs在spring中配置 <bean id="testWs" class="com.xxx.ws.test"/> 启动jetty后,发现没有调用test2222这个方法,也没有异常!是我的方式错了?
vidy_tu
vidy_tu
回复 @旁旁 : 呵呵,才开始会有些麻烦。Camel的意义在于服务可以任意组合打包后对外提供服务。
-赵本山-
-赵本山-
好吧,大概理解这个思路了。我试着做下!不过老感觉怪怪的,好像用了camel更麻烦了,没有体现出使用camel的意义。
0
破军1986
我页遇到同样问题,请问是怎么解决的
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部