activemq - java方式实现

本文详细介绍了如何使用Java实现ActiveMQ消息队列的点对点(P2P)模式和发布订阅模式。通过具体代码示例,展示了生产者如何发送消息到队列或主题,以及消费者如何接收和处理这些消息,包括两种不同的消费者实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 java方式 - 点对点

p2p模式(点对点模式):生产者生产的每一条消息只能被消费一次。 

 

生产者:

public class TestOriginalProducer {

	private final static String USER = ActiveMQConnectionFactory.DEFAULT_USER;
	private final static String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
	private final static String BROKER_URL = "tcp://192.168.0.111:61616";

	public static void main(String[] args) {
		TestOriginalProducer sender = new TestOriginalProducer();
		sender.send();
	}

	public void send() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USER, PASSWORD, BROKER_URL);
		QueueConnection connection = null;
		QueueSession session = null;
		Queue destination = null;
		QueueSender sender = null;
		try {
			connection = factory.createQueueConnection();
			connection.start();
			session = connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
			destination = session.createQueue("test-queue1");
			sender = session.createSender(destination);
			sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			for (int i = 0; i < 10000; i++) {
				String str = "hello " + i;
				TextMessage msg = session.createTextMessage(str);
				sender.send(msg);
			}
			session.commit();
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

消费者(第一种方式):

public class TestOriginalConsumer {

	private final static String USER = ActiveMQConnectionFactory.DEFAULT_USER;
	private final static String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
	private final static String BROKER_URL = "tcp://192.168.0.111:61616";

	public static void main(String[] args) {
		TestOriginalConsumer receiver = new TestOriginalConsumer();
		receiver.receiveMessage();
	}

	public void receiveMessage() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USER, PASSWORD, BROKER_URL);
		QueueConnnection connection = null;
		QueueSession session = null;
		Queue destination = null;
		QueueReceiver receiver = null;
		try {
			connection = factory.createQueueConnection();
			connection.start();
			session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			destination = session.createQueue("test-queue1");
			receiver = session.createReceiver(destination);
			while (true) {
				Object msg = receiver.receive();
				if (msg instanceof TextMessage) {
					TextMessage textMessage = (TextMessage) msg;
					if (!textMessage.getText().equals("") && msg != null) {
						System.out.println(textMessage.getText());
					} else {
						break;
					}
				}
			}
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 消费者(第二种方式):

public class TestOriginalConsumer {

	private final static String USER = ActiveMQConnectionFactory.DEFAULT_USER;
	private final static String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
	private final static String BROKER_URL = "tcp://192.168.0.111:61616";

	public static void main(String[] args) {
		TestOriginalConsumer receiver = new TestOriginalConsumer();
		receiver.receiveMessage();
	}

	public void receiveMessage() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USER, PASSWORD, BROKER_URL);
		QueueConnnection connection = null;
		QueueSession session = null;
		Queue destination = null;
		QueueReceiver receiver = null;
		try {
			connection = factory.createQueueConnection();
			connection.start();
			session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			destination = session.createQueue("test-queue1");
			receiver = session.createReceiver(destination);
			receiver.setMessageListener(new MessageListener() {
				public void onMessage(Message message) {
					if (message instanceof TextMessage) {
						TextMessage textMessage = (TextMessage) message;\
						System.out.println(textMessage.getText());
					}
				}
			});
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 java方式 - 发布订阅

发布订阅模式:一个生产者生产的消息,可以被多个消费者消费,前提是消费者订阅了生产者发布的主题。 

生产者: 

public class TestOriginalProvider {

	private final static String USER = ActiveMQConnectionFactory.DEFAULT_USER;
	private final static String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
	private final static String BROKER_URL = "tcp://192.168.0.111:61616";

	public static void main(String[] args) {
		new TestOriginalProvider().send();
	}

	public void send() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USER, PASSWORD, BROKER_URL);
		TopicConnection connection = null;
		TopicSession session = null;
		TopicPublisher publisher = null;
		Topic destination = null;
		try {
			connection = factory.createTopicConnection();
			connection.start();
			session = connection.createTopicSession(true, TopicSession.AUTO_ACKNOWLEDGE);
			destination = session.createTopic("test-topic");
			publisher = session.createTopicPublisher(destination);
			publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			for (int i = 0; i < 10000; i++) {
				String str = i + " hello world";
				TextMessage textMessage = session.createTextMessage();
				publisher.send(textMessage);
			}
			session.commit();
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

消费者(第一种方式):

public class TestOriginalConsumer {

	private final static String USER = ActiveMQConnectionFactory.DEFAULT_USER;
	private final static String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
	private final static String BROKER_URL = "tcp://192.168.0.111:61616";

	public static void main(String[] args) {
		new TestOriginalConsumer().send();
	}

	public void send() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USER, PASSWORD, BROKER_URL);
		TopicConnection connection = null;
		TopicSession session = null;
		TopicSubscriber subscriber = null;
		Topic destination = null;
		try {
			connection = factory.createTopicConnection();
			connection.start();
			session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
			destination = session.createTopic("test-topic");
			subscriber = session.createTopicSubscriber(destination);
			subscriber.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			while (true) {
				Object obj = subscriber.receive();
				if (obj instanceof TextMessage) {
					TextMessage textMessage = (TextMessage) obj;
					if (!textMessage.getText().equals("")) {
						System.out.println(textMessage.getText());
					} else {
						break;
					}
				}
			}
			
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

消费者(第二种方式):

public class TestOriginalConsumer {

	private final static String USER = ActiveMQConnectionFactory.DEFAULT_USER;
	private final static String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
	private final static String BROKER_URL = "tcp://192.168.0.111:61616";

	public static void main(String[] args) {
		new TestOriginalConsumer().send();
	}

	public void send() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(USER, PASSWORD, BROKER_URL);
		TopicConnection connection = null;
		TopicSession session = null;
		TopicSubscriber subscriber = null;
		Topic destination = null;
		try {
			connection = factory.createTopicConnection();
			connection.start();
			session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
			destination = session.createTopic("test-topic");
			subscriber = session.createTopicSubscriber(destination);
			subscriber.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			subscriber.setMessageListener(new MessageListener() {
				public void onMessage(Object obj) {
					if (obj instanceof TextMessage) {
						TextMessage textMessage = (TextMessage) obj;
						if (!textMessage.getText().equals("")) {
							System.out.println(textMessage.getText());
						}
					}
				}
			})
			
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值