只要注册ofo就送你10块钱,还等什么,快来注册吧
ActiveMq是比较稳定的,吞吐速度也很快,如果出现入队列或者出队列慢问题,先检查一下自己的代码,是不是本身取到数据后处理过慢。
1. 使用spring的JmsTemplate
JmsTemplate的send和convertAndSend会使用持久化mode,即使你设置了NON_PERSISTENT。这会导致入队列速度变得非常慢。
解决办法,使用下面的MyJmsTemplate代替JmsTemplate。
public class MyJmsTemplate extends JmsTemplate {
    private Session session;
    public MyJmsTemplate() {
        super();
    }
    public MyJmsTemplate(ConnectionFactory connectionFactory) {
        super(connectionFactory);
    }
    public void doSend(MessageProducer producer, Message message) throws JMSException {
        if (isExplicitQosEnabled()) {
            producer.send(message, getDeliveryMode(), getPriority(), getTimeToLive());
        } else {
            producer.send(message);
        }
    }
    public Session getSession() {
        return session;
    }
    public void setSession(Session session) {
        this.session = session;
    }
}
2. DeliveryMode的选择,如果你入队列的数据,不考虑MQ挂掉的情况(这概率很小),使用NON_PERSISTENT会显著提高数据写入速度。
3. 生产者使用事务会提高入队列性能,但是消费者如果启动了事务则会显著影响数据的消费速度。
| 
 | 
 | 
代码中的false代表不启动事物。
4. 消费者的消息处理即onMessage方法优化:
| 
 | 
 | 
这段代码使用了线程池,另一点要注意的是msg.getObject();这个方法是一个比较耗时的方法,你的代码中不应该出现多次getObject()。
5. 消费者使用预取,如何使用预取,下面以spring版本为例
| 
 | 
 | 
预取数量根据具体入队列数据而定,以上设置100,是针对2000/sec入队列速度设定的。
另外如果是慢消费者,这里可设置为1。
6. 检查你的MQ数据吞吐速度,保持生产和消费的平衡,不会出现大量积压。
7. ActiveMQ使用TCP协议时tcpNoDelay=默认是false ,设置为true可以提高性能。
还是spring版本的:123456<bean id="mqPoolConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">       <property name="connectionFactory">           <bean id="mqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" p:useAsyncSend="true"                 p:brokerURL="failover://(tcp://127.0.0.1:61616?tcpNoDelay=true)"/>       </property>   </bean>
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最快的浏览器
中国人都在使用的地球上最厉害的安全软件
中国人都在使用的地球上最好的看图王
中国人都在使用的地球上最快速的视频软件
中国人都在使用的地球上最全的视频软件
中国人都在使用的地球上最好最全的压缩软件
中国人都在使用的地球上最好的音乐播放器
中国人都在使用的地球上最安全的杀毒软件
中国人都在使用的地球上最全的影视大全