Spring Integeration学习
来源:互联网 发布:讲课视频软件 小学 编辑:程序博客网 时间:2024/06/07 02:32
Spring Integeration涉及的概念很多,最重要的有三点:Message、Channel、EndPoint
1、Message
Message是Spring Integration最基本的概念之一。Message是对系统内各节点间交互内容封装的对象。可以把Spring Integration比作一系列的管道,那么Message就是管道中流动的水。
Message对象包含两部分,消息头(header)和负载(payload)。消息头包含消息Id、时间戳、优先级等信息。负载中放什么都可以,这里是真正要交互的数据。
Message 接口定义:
public interface Message<T> {
T getPayload();
MessageHeadersgetHeaders();
}
Channel也是Spring Integration中最基本的概念之一。Channel就好像一个管子,生产者生产一个Message放到Channel,消费者从Channel消费一个Message,所以Channel可以对Message组件解耦,并且可以提供一个方便的拦截功能和监控功能
MessageChannel 接口定义
public interface MessageChannel {
boolean send(Message message);
boolean send(Messagemessage, long timeout);
}
Message Endpoint是指处理Message的端点,在Channel中不能处理消息。对消息的处理只能在这里完成。这里不需要修改你的代码,只需要做一些配置声明即可完成预取操作。
Spring Integeration实践
a、Spring Integration中Http相关的概念有Http Inbound Gateway、Http Outbound Gateway。可以把http Inboundgateway 看作是服务端组件,Http OutboundGateway看作客户端组件。
服务器端:
Http Inbound-gateway用来接受/receiveGateway的POST请求或GET请求,并连接到一个receiveChannel通道,通道关联到一个service-activator,service-activator对应一个empolyeeSearchService服务类的hello方法。配置如下:
<int-http:inbound-gateway
request-channel="receiveChannel"
name="/receiveGateway"
supported-methods="POST,GET"/>
<int:channelid="receiveChannel"/>
<int:service-activator
input-channel="receiveChannel"
ref="employeeSearchService"
method="hello""/>
1. 拦截器应用
拦截器作用在Channel上,可以实现编解码、加密解密、鉴权、日志、监控等操作。我们的实例中也可以在Channel上设置拦截器,配置如下:
<int:channelid="inputChannel">
<int:interceptors>
<refbean="myChannelInterceptor"/>
<refbean="mysecondChannelInterceptor"/>
</int:interceptors>
</int:channel>
<beanid="myChannelInterceptor"
class="com.service.myChannelInterceptor"/>
拦截器代码实现如下:
public class myChannelInterceptor implements ChannelInterceptor {
@Override
public Message<?>postReceive(Message<?> msg, MessageChannel channel) {
return msg;
}
@Override
public Message<?> preSend(Message<?>msg, MessageChannel channel) {
MultiValueMap map = (MultiValueMap)message.getPayload();
LinkedList list =(LinkedList)map.get("employeeId");
String id = (String)list.get(0);
if (id.equals("errUser")) {
throw new MessagingException("useris error!");
}
return msg;
}
1. Transformer应用
当请求参数与Service实例输入的参数不一致时,我们需要使用Transformer对输入的参数作转换。转换器需要关联一个输入Channel和输出的Channel。配置如下:
<int:transformer
ref="employeeSearchService"
method="transforParam"
input-channel="inputChannel"
output-channel="inputChannel_transformed"/>
上述配置中实现转换的是”employeeSearchService”Bean的transforParam方法。方法声明中要加标注@Transformer。方法的代码如下:
@Transformer
publicMessage<MyParam> transforParam(Message<?> inMessage) {
MultiValueMap map = (MultiValueMap)inMessage.getPayload();
LinkedList list = (LinkedList)map.get("employeeId");
String id = (String)list.get(0);
String name = (String)map.get("name");
MyParam param = new MyParam();
param.setName(name);
param.setId(id);
Message<MyParam>message =
newGenericMessage<MyParam>(param,inMessage.getHeaders());
return message;
}
- Spring Integeration学习
- Spring Integeration学习
- spring integeration主要概念
- spring integeration主要概念
- Spring学习【Spring概述】
- spring学习--spring profile
- Spring学习
- 学习spring
- 学习Spring
- spring学习
- Spring学习
- spring学习
- spring 学习
- spring学习
- Spring学习
- spring学习
- Spring学习
- Spring学习
- Android近期任务列表 Recent Applicatoins 分析 + Android PackageManager
- 《乔布斯传.神一样的传奇》读后感
- linux下svn客户端安装及环境配置
- cloudstack 开发软件包缺失问题及解决方法
- 外国人发短信时常用的英文缩写
- Spring Integeration学习
- FlushMode属性
- DBA创建表空间,并赋权
- WIN开始→运行→输入的命令集锦
- Windows mobile模拟器上网的配置步骤
- mysql 常见错误
- PHP依赖管理工具Composer入门
- 虚函数
- C++调用C#生成的DLL实现及注意事项