消息分组

JMS消息属性JMXGroupID被用来区分消息分组(Message Group)。消息分组(Message Groups)特性保证所有具有相同JMSGroupID的消息会被分发到相同的消费者(Consumer)。另一方面,消息分组(Message Groups)也是一种负载均衡的机制。

在一个消息被分发到消费者(Consumer)前,代理(Broker)会检查消息的JMSGroupID属性。如果存在,那么代理(Broker)会检查是否有某个消费者(Consumer)拥有这个消息分组(Message Group)。如果没有,那么代理(Broker)会选择一个消费者(Consumer),并将它关联到这个消息分组(Message Group)。此后,这个消费者(Consumer)会接收这个消息分组(Message Group)的所有消息。直到:

  • 消费者(Consumer)被关闭。
  • 消息分组(Message Group)被关闭。通过发送一个消息,并设置这个消息的JMSXGroupSeq为-1。

Primeton MQ支持一个布尔字段JMSXGroupFirstForConsumer 。当某个消息分组(Message Group)的第一个消息被发送到消费者(Consumer)的时候,这个字段被设置。如果客户使用failover transport连接到代理(Broker),在由于网络问题等造成客户重新连接到代理(Broker)的时候,相同消息分组(Message Group)的消息可能会被分发到与之前不同的消费者(Consumer),因此JMSXGroupFirstForConsumer字段也会被重新设置。

创建一个消息分组(Message Groups),只需要在Message对象上设置属性即可。如下:

Message message = session.createTextMessage("hello,world");
message.setStringProperty("JMSXGroupID","GroupA");
...
producer.send(message);

关闭一个消息分组(Message Group),也只需要在Message对象上设置相应的属性即可。如下:

message.setStringProperty("JMSXGroupID","GroupA");
message.setIntProperty("JMSXGroupSeq", -1);

results matching ""

    No results matching ""