ActiveMQ中组合模式:Message组合JMSMessage对象

在ActiveMQ中,组合模式用于Message组合JMSMessage对象。

具体来说:

  • JMSMessage是一个表示JMS消息的抽象类。
  • ActiveMQ定义了不同类型的JMSMessage实现:
  • ActiveMQTextMessage:实现TextMessage接口,存储和传递文本消息
  • ActiveMQBytesMessage:实现BytesMessage接口,存储和传递字节消息
  • …等不同类型的JMSMessage实现
  • 当用户通过ActiveMQ API发送消息时,会创建一个具体的JMSMessage实现,如:
  // 发送文本消息
  TextMessage message = session.createTextMessage("hello");  
  producer.send(message);
  • 这个TextMessage其实是ActiveMQTextMessage的实例,实现了JMS规范中的TextMessage接口
  • ActiveMQTextMessage通过组合ActiveMQMessage来实现JMS规范中的TextMessage:
  public class ActiveMQTextMessage extends ActiveMQMessage implements TextMessage {

    private ActiveMQMessage message;  

    public ActiveMQTextMessage(ActiveMQMessage message) {
       this.message = message;      
    }

    // 实现TextMessage接口     
    public String getText() throws JMSException {
       return message.getText();      
    }

    // ...其他方法    
  }

ActiveMQMessage包含了通用的JMS消息功能,ActiveMQTextMessage通过组合ActiveMQMessage来提供针对文本消息的特殊功能。

所以说,ActiveMQ中采用组合模式,将更具体的ActiveMQTextMessage组合到更通用的ActiveMQMessage中。

这种组合关系符合”使用组合优于继承”的基本原则。

ActiveMQ中其他类型的JMSMessage也是采用类似的组合关系,来实现指定类型的消息功能。