默认情况下,activemq使用tcp协议。但现在,我改变它使用ssl。
如果我在一台计算机上部署发布者和服务器,则速度方面没有区别。但是在我将它们部署到不同的机器上之后,使用ssl比使用tcp要慢得多。这是正常的吗?如果没有,我的代码可能有什么问题?
感谢。
答案 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();
}
}