网关性能不佳

时间:2014-04-01 07:15:27

标签: spring integration spring-integration

我使用网关作为邮件系统的入口点。在进一步研究之前,我想测试性能,我发现网关花费了太多时间来处理每个请求。我有以下代码:

配置

<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";
}

1 个答案:

答案 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)?