Broadcast pull message model
prerequisite
You can use IntelliJ IDEA or Eclipse. This article takes IntelliJ IDEA as an example.
background information
The queue provides a one-to-one shared message consumption model, which uses the client pull mode. The topic model provides a one to many broadcast message consumption model, which uses the server active push mode.
Solution
Install Java dependency libraries
Create a Java project in IDEA. stay pom.xml Add the following dependencies to the file to import the Java dependency library. <dependency> <groupId>com.aliyun.mns</groupId> <artifactId>aliyun-sdk-mns</artifactId> <version>1.1.9.2</version> </dependency>
Interface description
public CloudPullTopic createPullTopic(TopicMeta topicMeta, Vector<String> queueNameList, boolean needCreateQueue, QueueMeta queueMetaTemplate) public CloudPullTopic createPullTopic(TopicMeta topicMeta, Vector<String> queueNameList)
TopicMeta : parameter settings for creating themes. QueueMeta : Create the parameter settings of the queue. queueNameList : Specifies the list of queue names for the topic message push. needCreateQueue : queueNameList Whether it needs to be created. queueMetaTemplate : Required for queue creation QueueMeta Parameter example.
Sample code
package doc; //Related classes for introducing Alibaba Cloud Message Service MNS import com.aliyun.mns.client. CloudAccount; import com.aliyun.mns.client. MNSClient; import com.aliyun.mns.model. QueueMeta; import com.aliyun.mns.model. TopicMeta; import com.aliyun.mns.client. CloudPullTopic; import com.aliyun.mns.model. TopicMessage; import com.aliyun.mns.model. RawTopicMessage; import com.aliyun.mns.model. Message; import com.aliyun.mns.client. CloudQueue; import com.aliyun.mns.common. ServiceException; import com.aliyun.mns.common. ClientException; import java.util. Vector; public class DemoTopicMessageBroadcast { public static void main(String[] args) { //Obtain the AccessKey ID, AccessKey Secret and MNS service endpoint of the AliCloud account. CloudAccount account = new CloudAccount( ServiceSettings.getMNSAccessKeyId(), ServiceSettings.getMNSAccessKeySecret(), ServiceSettings.getMNSAccountEndpoint()); MNSClient client = account.getMNSClient(); //Create a consumer list. Vector<String> consumerNameList = new Vector<String>(); String consumerName1 = "consumer001"; String consumerName2 = "consumer002"; String consumerName3 = "consumer003"; consumerNameList.add(consumerName1); consumerNameList.add(consumerName2); consumerNameList.add(consumerName3); QueueMeta queueMetaTemplate = new QueueMeta(); queueMetaTemplate.setPollingWaitSeconds(30); try{ //Create a theme. String topicName = "demo-topic-for-pull"; TopicMeta topicMeta = new TopicMeta(); topicMeta.setTopicName(topicName); CloudPullTopic pullTopic = client.createPullTopic(topicMeta, consumerNameList, true, queueMetaTemplate); //Publish messages. String messageBody = "broadcast message to all the consumers:hello the world."; //If the original message is sent, use getMessageBodyAsRawString to parse the message body. TopicMessage tMessage = new RawTopicMessage(); tMessage.setBaseMessageBody(messageBody); pullTopic.publishMessage(tMessage); //Receive messages. CloudQueue queueForConsumer1 = client.getQueueRef(consumerName1); CloudQueue queueForConsumer2 = client.getQueueRef(consumerName2); CloudQueue queueForConsumer3 = client.getQueueRef(consumerName3); Message consumer1Msg = queueForConsumer1.popMessage(30); if(consumer1Msg != null) { System.out.println("consumer1 receive message:" + consumer1Msg.getMessageBodyAsRawString()); } else{ System.out.println("the queue is empty"); } Message consumer2Msg = queueForConsumer2.popMessage(30); if(consumer2Msg != null) { System.out.println("consumer2 receive message:" + consumer2Msg.getMessageBodyAsRawString()); }else{ System.out.println("the queue is empty"); } Message consumer3Msg = queueForConsumer3.popMessage(30); if(consumer3Msg != null) { System.out.println("consumer3 receive message:" + consumer3Msg.getMessageBodyAsRawString()); }else{ System.out.println("the queue is empty"); } //Delete topic. pullTopic.delete(); } catch(ClientException ce) { System.out.println("Something wrong with the network connection between client and MNS service." + "Please check your network and DNS availability."); ce.printStackTrace(); } catch(ServiceException se) { se.printStackTrace(); } client.close(); } }
-
Introduction to this page (1)