Apache RocketMQ之JMS基本概念及使用:https://cloud.tencent.com/developer/article/1412675
Apache RocketMQ 基础概念及架构解析:https://cloud.tencent.com/developer/article/1412649
Apache RocketMQ 的基础特性介绍:https://cloud.tencent.com/developer/article/1412645
Apache RocketMQ 集群搭建(两主两从):https://cloud.tencent.com/developer/article/1412653
Apache RocketMQ 刷盘策略与复制策略: https://cloud.tencent.com/developer/article/1412663
优秀博客:
https://blog.csdn.net/canot/article/details/53676350
https://blog.csdn.net/caidaoqq/article/details/45938919
https://blog.csdn.net/u013123635/article/details/78362360
8.png
JMS由以下元素组成。
元素 | 描述 |
---|---|
JMS提供者 | 连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。 |
JMS客户 | 生产或消费消息的基于Java的应用程序或对象。 |
JMS生产者 | 创建并发送消息的JMS客户。 |
JMS消费者 | 接收消息的JMS客户。 |
JMS消息 | 包括可以在JMS客户之间传递的数据的对象。 |
JMS队列 | 一个容纳那些被发送的等待阅读的消息的区域。这些消息将按照顺序发送,一旦一个消息被阅读,该消息将被从队列中移走。 |
JMS主题 | 一种支持发送消息给多个订阅者的机制。 |
4.png
标准的JMS消息头与JMS API提供的方法一起工作。大多数头信息是被自动分配的。
接下来描述每个头的含义,以及如何被分配到消息中的。
JMSDestination
JMSDeliveryMode
JMSMessageID
JMSTimestamp
JMSExpiration
JMSRedelivered
JMSPriority
JMSReplyTo
JMSCorrelationID
JMSType
public interface Message {
...
boolean getBooleanProperty(String name) throws JMSException;
byte getByteProperty(String name) throws JMSException;
short getShortProperty(String name) throws JMSException;
int getIntProperty(String name) throws JMSException;
long getLongProperty(String name) throws JMSException;
float getFloatProperty(String name) throws JMSException;
double getDoubleProperty(String name) throws JMSException;
String getStringProperty(String name) throws JMSException;
Object getObjectProperty(String name) throws JMSException;
...
Enumeration getPropertyNames() throws JMSException;
boolean propertyExists(String name) throws JMSException;
...
void setBooleanProperty(String name, boolean value) throws JMSException;
void setByteProperty(String name, byte value) throws JMSException;
void setShortProperty(String name, short value) throws JMSException;
void setIntProperty(String name, int value) throws JMSException;
void setLongProperty(String name, long value) throws JMSException;
void setFloatProperty(String name, float value) throws JMSException;
void setDoubleProperty(String name, double value) throws JMSException;
void setStringProperty(String name, String value) throws JMSException;
void setObjectProperty(String name, Object value) throws JMSException;
...
}
自定义属性:
例如:
TextMessage message = pubSession .createTextMessage();
message.setText(userName +":" +text );
message.setStringProperty("username" , userName );
publisher.publish(message );
JMS定义的属性
属性 | 描述 |
---|---|
JMSXAppID | 标识发送消息的应用程序 |
JMSXConsumerTXID | 使用此消息的事务的事务标识符 |
JMSXDeliveryCount | 消息传递尝试的数量 |
JMSXGroupID | 此消息是其一部分的消息组 |
JMSXGroupSeq | 组中此消息的序列号 |
JMSXProducerTXID | 生成此消息的事务的事务标识符 |
JMSXRcvTimestamp | JMS提供者向消费者传递消息的时间 |
JMSXState | 用于定义特定于提供程序的状态 |
JMSXUserID | 标识发送消息的用户 |
特定于提供者的属性
类型 | 描述 |
---|---|
Message | 最基础的消息体,没有数据载体。仅仅包含了消息体和属性,一般用做简单的时间通知。 |
TextMessage | 文本消息 字符串数据载体。一般用来发送简单的文本,XML数据。 |
MapMessage | key-value键值队作为数据载体。key一般使用字符串,value可以为Java原始类型。 |
BytesMessage | 使用一个二进制数据来做数据载体。 |
StreamMessage | Java原始类型的流数据 |
ObjectMessage | 序列化后的完整Java类。通过使用与复杂Java类型。也支持集合 |
5.png
6.png
接口 | 描述 |
---|---|
ConnectionFactory 接口(连接工厂) | 创建Connection对象的工厂,根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂分,别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。 |
Destination 接口(目标) | Destination是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。 |
Connection 接口(连接) | Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。 |
Session 接口(会话) | Session是我们操作消息的接口。表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。 |
MessageProducer 接口(消息的生产者) | 消息生产者由Session创建,并用于将消息发送到Destination。消费者可以同步地(阻塞模式),或异步(非阻塞)接收队列和主题类型的消息。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。 |
MessageConsumer 接口(消息消费者) | 消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。 |
Message 接口(消息) | 是在消费者和生产者之间传送的对象,也就是说从一个应用程序创送到另一个应用程序。一个消息有三个主要部分:1、消息头(必须):包含用于识别和为消息寻找路由的操作设置。2、一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。3、一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。消息接口非常灵活,并提供了许多方式来定制消息的内容。 |
MessageListener | 消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。 |
7.png
其他专题:
Redis:https://www.jianshu.com/nb/32287093