【问题标题】:performance about apache activemq using ssl关于使用 ssl 的 apache activemq 的性能
【发布时间】:2012-07-09 22:47:24
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: ssl activemq


    【解决方案1】:

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

    如果您处理大量数据,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(); 
     }
    }
    

    【讨论】:

    • 嗯,数据非常少。这是发布者的代码: ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("ssl://192.168.0.111:61616");连接连接 = factory.createConnection();连接.start();会话会话 = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);主题 topic = session.createTopic(newDataEvent.getDataType().getType()); MessageProducer 生产者 = session.createProducer(topic); TextMessage 消息 = session.createTextMessage(); message.setText(xstream.toXML(newDataEvent));生产者.发送(消息); session.close();连接.close();
    • newDataEvent 对象只包含一些完全相同的数据。
    • 另外,当发布者初始化时,我设置了keystore、keystorepassword、truststore、truststorepassword的系统属性
    • 嗨,我还是有问题。以下是问题:1)您的代码不起作用。 eclipse 显示我必须使用 PooledConnectionFactory factory = new PooledConnectionFactory(""),但后来出现异常:NoClassDefFoundError: org/apache/commons/pool/ObjectPoolFactory. 2)创建连接或会话时发生握手?我的发布者是一个线程,所以在初始化时,我只创建了一个连接,但是对于每条消息,我都创建了一个新会话,我仍然面临性能问题。有什么建议么?非常感谢。
    • 嗯..我的错,我忘了导入 jar 文件。现在可以了。真的谢谢,伙计!
    猜你喜欢
    • 2016-12-15
    • 2023-04-04
    • 2010-11-20
    • 2017-01-29
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多