1. 优化ActiveMQ 性能 1.1. 一般技术 1.1.1. Persistent vs Non-Persistent Message 持久化和非持久化传递 1.PERSISTENT(持久性消息) 这是 ActiveMQ 的默认传送模式,此模式保证这些消息只被传送一次和成功使用一次。对于这些消息,可靠性是优先考虑的因素。可靠性的另一个重要方面是确保持久性消息传送至目标后,消息服务在向消费者传送它们之前不会丢失这些消息。这意味着在持久性消息传送至目标时,消息服务将其放入持久性数据存储。如果消息服务由于某种原因导致失败,它可以恢复此消息并将此消息传送至相应的消费者。虽然这样增加了消息传送的开销,但却增加了可靠性。 2.NON_PERSISTENT(非持久性消息) 保证这些消息最多被传送一次。对于这些消息,可靠性并非主要的考虑因素。 此模式并不要求持久性的数据存储,也不保证消息服务由于某种原因导致失败后消息不会丢失。 有两种方法指定传送模式: 1.使用setDeliveryMode 方法,这样所有的消息都采用此传送模式; 2.使用send 方法为每一条消息设置传送模式; 方法一:void send(Destination destination, Message message, int deliveryMode, int priority,long timeToLive); 方法二:void send(Message message, int deliveryMode, int priority, longtimeToLive); 其中 deliveryMode 为传送模式,priority 为消息优先级,timeToLive 为消息过期 时间。 方法三:producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); JMS 规范1.1 允许消息传递包括Persistent 和Non-Persistent。 Non-persistent 传递消息比 Persistents 传递消息速度更快,原因如下: 1) Non-persistent 发送消息是异步的,Produ cer 不需要等待 Consu mer 的 receipt 消息。如下图: 2) Persisting 传递消息是需要把消息存储起来。然后在传递,这样很慢 。 1.1.2. Transactions 事务 以下列子说明了 Transaction 比 Non-transaction 的性能高。 Transaction 和Non-transaction 代码如下: 1.1.3. 超快回应消息 内嵌 broker;如下图: 下面以Co-lcate (合作定位)w ith a broker 为例。 其运行原理如下图: Java 代码如下: 创建一个 queue 服务: 创建一个 qu eu eRequ estor: 注意: 设置发送的消息不需要copy。 1.1.4. Tuning the OpenWire protocol 跨语言协议 //TODO 1.1.5. Tuning the ...