典型的发送组件
1.从ComponentContext组件获取javax.jbi.messaging.DeliveryChannel实例
2.从DeliveryChannel实例获取javax.jbi.messaging.MessageExchangeFactory类实例
3.使用MessageExchangeFactory实例创建包含消息内容的javax.jbi.messaging.MessageExchange实例
4.通过DeliveryChannel实例将MessageExchange实例发送到目的地。
代码5中通过发送组件发送基于字符串的XML消息
代码5. 发送消息
public void sendMessage(String xml)
{
try
{
ComponentContext context = getContext();
InOnly exchange =
context.getDeliveryChannel().
createExchangeFactory().createInOnlyExchange();
NormalizedMessage message = exchange.createMessage();
message.setContent(new StringSource(xml));
if (resolver != null)
{
ServiceEndpoint destination =
resolver.resolveEndpoint(getContext(),
exchange,
NullEndpointFilter.getInstance());
exchange.setEndpoint(destination);
}
exchange.setInMessage(message);
// 现在,发送exchange消息
context.getDeliveryChannel().send(exchange);
}
catch (Exception e)
{
e.printStackTrace();
}
}
对特定消息感兴趣的组件可以通过JBI框架提供的多种途径来订阅消息交换对象。一种简单机制是,接收组件可以实现MessageExchangeListener 接口,发送组件设定此接受者为org.servicemix.jbi.resolver.EndpointResolver端点解析组件。这样设定之后,ServiceMix会完成从发送者到接受者的消息传输过程。代码6说明了此过程。
代码6 基于端点解析的简单接收过程
public class ReceiverComponent
extends ComponentSupport
implements MessageExchangeListener, Receiver
{
…
// MessageExchangeListener接口的方法
public void onMessageExchange(MessageExchange exchange)
throws MessagingException
{
NormalizedMessage inMessage = exchange.getMessage(“in”);
if (inMessage == null)
{
throw new MessagingException(“Null in message delivered!”);
}
System.out.println(inMessage);
}
}
//创建接收与发送组件,并将接收组件设置为发送组件中的EndpointResolver对象
ReceiverComponent receiver = new ReceiverComponent();
SenderComponent sender = new SenderComponent();
sender.setResolver(new ServiceNameEndpointResolver(ReceiverComponent.QNAME));
图3 是ServiceMix中发送接收简单消息交换的序列图
图3. 发送接受简单消息
在Windows中安装启动ServiceMix
下载并在Windows系统中安装2进制分发包,需如下步骤:
1.从ServiceMix.org下载Windows平台的ServiceMix分发包
2.在目的目录中释放此压缩包。
如下,在Windows命令行窗口中,转到ServiceMix安装目录,
cd [servicemix_install_dir]bin
替换servicemix_install_dir为ServiceMix的安装目录,如c:Program Filesservicemix-1.x. 然后敲servicemix命令。
在Unix中安装启动ServiceMix
过程如下:
1.下载ServiceMix unix分发包。转到下载目录,解压gzip文件到目的目录,比如:
gunzip servicemix-x.x.x.tar.gz
tar xvf servicemix-x.x.x.tar
2.如果启动脚本没有执行权限,修改一下bin目录下执行脚本的权限。如果[servicemix_install_dir]是你的安装目录,那么执行如下命令。
cd [servicemix_install_dir]/bin
chmod 755 servicemix
在shell中,转到安装目录[servicemix_isntall_dir],执行启动脚本servicemix,来启动ServiceMix服务。
cd [servicemix_install_dir]/bin.
servicemix
测试安装
如果正确启动,Windows控制台窗口和Unix shell会显示类似如下信息:
INFO JBIContainer — ServiceMix JBI Container
name: defaultJBI running version: null
终止ServiceMix服务
在Windows窗口或unix shell中敲CTRL-C, 结束Servicemix服务。
如果是Unix后台执行的ServiceMix,可以如下结束相应进程,
ps -ef|grep servicemix
kill PID
替换 PID 为查询获得的实际ServiceMix进程的PID
结论
使用 SOA 架构服务,需要连接不同位置、不同传输协议、不同消息格式的组件或服务的基础设施,ESB企业服务总线满足这些需求。
JBI规范和API定义了范化消息服务、组件框架、管理模型用于构建基于标准的可插拔的ESB系统。ServiceMix是轻量的、基于JBI规范语义和API的、开源ESB和SOA工具包,使用Apache许可证分发。Servicemix可以简单的作为嵌入式或者独立的ESB服务运行。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SOA的2008年:应用软件开发hot stove联盟
回首2008年,我们发现一个完整的SOA年。在2008年初,SearchSOA.com涉及Eclipse和影响SCA和JBI。看来,JavaScript框架和图书馆厂商-开放源码的倡导者,仍然处理Web……
-
SOA有哪些基本原则?
在SOA中服务粒度有两种相关的意思,即服务是如何实现的,服务使用和返回了多少数据或多少消息。细粒度服务执行了最小的功能,发送和接收少量的数据……
-
JBI-Java实现SOA的标准途径
本文简短地阐述了即将到来的与SOA(面向服务体系)规范及ESB(企业服务总线)基础架构有关的JBI(Java业务集成)标准……
-
JBI简介
我最近听说有一些开始使用JBI 2.0 ,我感到很惊讶,因为我从来没有看到或听到任何关于JBI 1.0 。JBI 2.0版比原来的版本提供更多的承诺?