Java=>消息中间件ActiveMQ之主题【初学篇】

1.创建maven工程,在pom.xml导入日志包和ActiveMQ包

	<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-api</artifactId>
	    <version>1.7.25</version>
	</dependency>
  
  	
  	<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-core -->
	<dependency>
	    <groupId>org.apache.activemq</groupId>
	    <artifactId>activemq-core</artifactId>
	    <version>5.5.1</version>
	</dependency>

注:可前往http://mvnrepository.com获取对应版本的maven相关包

2.消息生产者

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

	public class ActiveProducer {
		
		private static final String url = "tcp://localhost:61616";
		private static final String topicName = "topic-test";
		
		public static void main(String[] args) throws JMSException {
			//连接工厂
			ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
			//获取连接对象
			Connection connection = connectionFactory.createConnection();
			//开启连接
			connection.start();
			//创建session会话
			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//创建主题目的地
			Destination destination = session.createTopic(topicName);
			//创建生产者
			MessageProducer producer = session.createProducer(destination);
			
			for(Integer i=0;i<100;i++){
				//创建需要发送消息
				TextMessage message = session.createTextMessage("我是主题生产者:这是第"+i+"条消息");
				//发送消息
				producer.send(message);
				
				System.out.println("主题生产者成功发送第第"+i+"条消息");
			}
		}
}

3.消息消费者

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ActiveComsumer {

	private static final String url = "tcp://localhost:61616";
	private static final String topicName = "topic-test";
	
	public static void main(String[] args) throws JMSException{
		//连接工厂
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
		//创建连接
		Connection connection = connectionFactory.createConnection();
		//开启连接
		connection.start();
		//创建session会话
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//创建主题目的地
		Destination destination = session.createTopic(topicName);
		//创建消费者
		MessageConsumer consumer = session.createConsumer(destination);
		//设置监听消息服务
		consumer.setMessageListener(new MessageListener() {
			
			public void onMessage(Message messageContent) {
				TextMessage message = (TextMessage)messageContent;
				try {
					//接收到的消息
					System.out.println("主题元素的消费者,接收到的消息:"+message.getText());
					
				} catch (JMSException e) {
					e.printStackTrace();
				}
				
			}
		});
	}
}

4.运行

    1.  先运行ActiveMQ服务【http://localhost:8161/admin】=>运行运行1个消费者 =>后消息生产者 {必须先运行消费者进行监听}

        未有消息消费:

      消费消息:

    2.  先运行ActiveMQ服务【http://localhost:8161/admin】=>运行运行3个消费者 =>后消息生产者 {必须先运行消费者进行监听}

      未有消息消费:

      消费消息:

查看消费者监听服务控制台:

消费者A、消费者B、消费者C  都打印:

总结:

ActiveMQ主题(topic)模式,每个消费者都可以全部消费生产者的每条信息,生产者生产100条信息,3个消费者就会有300条信息被消费。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值