1

默认情况下,activemq 使用 tcp 协议。但是现在,我将其更改为使用 ssl。

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

谢谢。

4

1 回答 1

3

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

如果您处理大量数据,SSL 将花费相当多的 CPU 周期来加密(以及解密)数据。是较慢的 ActiveMQ 服务器还是客户端。对系统设置进行概要分析,以大致了解在哪里可以找到瓶颈。

另一种可能性是频繁握手。假设您的客户端代码(您可以发布吗?)通过为每条消息打开连接来发送消息,与普通 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(); 
 }
}
于 2012-07-09T09:46:43.893 回答