默认情况下,activemq 使用 tcp 协议。但是现在,我将其更改为使用 ssl。
如果我在一台机器上部署发布者和服务器,则速度没有区别。但是在我将它们部署在不同的机器上之后,使用 ssl 比使用 tcp 慢得多。这是正常的吗?如果没有,我的代码可能有什么问题?
谢谢。
取决于您的应用程序运行速度有多慢。
如果您处理大量数据,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();
}
}