我使用网关作为邮件系统的入口点。在进一步研究之前,我想测试性能,我发现网关花费了太多时间来处理每个请求。我有以下代码:
配置
<int:gateway id="inGateway"
service-interface="com.example.MyInterface" default-request-channel="requestChannel"
default-reply-channel="replyChannel"/>
<int:channel id="requestChannel"/>
<int:service-activator method="process" input-channel="requestChannel" ref="myProcessor" output-channel="replyChannel"/>
<int:channel id="replyChannel"/>
处理器只接收消息并返回默认字符串“hello”。没有处理。测试如下:
@Autowired
private MyInterface service;
@Test
public void testBucle() {
String test = service.getTest("Hi");
long start = System.currentTimeMillis();
for (int i=0;i<10000;i++) {
test = service.getTest("Hi");
}
long end = System.currentTimeMillis();
long total = (end - start);
System.out.println("Total: "+total);
}
此测试需要大约3秒才能执行,而如果我更改service.getTest(“Hi”)直接调用处理器需要11ms。任何人都可以告诉我,如果有什么问题做错了或是这样吗?
编辑:我正在添加处理器。它是一个虚拟处理器来测试流量性能:public String process(Message<String> data) {
return "hello";
}
答案 0 :(得分:0)
11ms因为你直接使用你的代码而没有任何消息传递背景 - 没有GC用于不可变的Message
对象(10000)和反射用于方法调用(来自网关代理)
对我来说,你的考试需要这段时间:
Total: 433 Total: 247 Total: 150 Total: 145 Total: 152 Total: 146 Total: 142 Total: 142 Total: 142 Total: 143
测试方法为@Repeat(10)
,<int:service-activator input-channel="requestChannel" expression="'hello'"/>
。
由于您的replyChannel
没有做任何特别的事情,您可以摆脱它,并且您会获得一些性能提升,因为无需将replyChannel
的回复关联到来自TemporaryReplyChannel
的{{1}}。
无论如何,请显示MessageHeaders
您使用的是哪个版本的Spring Integration?你不介意升级到最新的 - 3.0.2(http://projects.spring.io/spring-integration)?