关于使用ssl的apache activemq的性能

时间:2012-07-09 03:32:29

标签: ssl activemq

默认情况下,activemq使用tcp协议。但现在,我改变它使用ssl。

如果我在一台计算机上部署发布者和服务器,则速度方面没有区别。但是在我将它们部署到不同的机器上之后,使用ssl比使用tcp要慢得多。这是正常的吗?如果没有,我的代码可能有什么问题?

感谢。

1 个答案:

答案 0 :(得分:3)

取决于您的应用程序运行速度有多慢。

如果处理大量数据量,SSL将需要相当多的CPU周期来加密(并解密)数据。是ActiveMQ服务器更慢还是客户端。对系统设置进行概述,以便了解查找bottenecks的位置。

另一种可能性是经常握手。假设您的客户端代码(可以发布吗?)通过打开每条消息的连接来发送消息,可能是因为与普通tcp相比,发送消息的延迟会受到增加的SSL握手时间的影响。

更新:

加快将重用您的连接。必须对您的情况下发送的每个消息进行SSL握手,这涉及cpu昂贵的非对称加密和比普通TCP更多的tcp往返。使用activemq提供的池连接工厂很容易做到。此示例不会更改您的代码:

public class MySender{
 private static ConnectionFactory factory = new org.apache.activemq.pool.PooledConnectionFactory("ssl://192.168.0.111:61616");
 public void send(){
  Connection connection = factory.createConnection();
  Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  Topic topic = session.createTopic(newDataEvent.getDataType().getType());
  MessageProducer producer = session.createProducer(topic);
  TextMessage message = session.createTextMessage();
  message.setText(xstream.toXML(newDataEvent));
  producer.send(message);
  session.close();
  connection.close(); 
 }
}