最近在学习JMS(Java Message Service),用到的是activemq(消息队列),写了简单的例子,跟大家一起分享一下:
1.JMS和activemq之间的关系 : JMS是一种标准规范,接口形式(消息发送是异步,非阻塞的)/activemq则是实现了JMS,存在点对点/发布订阅
2.应用场景 : 系统A---->系统B 发送消息 , 则是就需要消息系统activemq来完成这个任务
3.练习需要用到的jar包 : activemq-core-5.7.0.jar , geronimo-j2ee-management_1.1_spec-1.0.1.jar , geronimo-jms_1.1_spec-1.1.1.jar , org.slf4j.api_1.6.4.jar
4.练习需要用到的activemq包 ,官网下载windoiws版本/linux版本(看个人喜好,建议用linux版本) , 下面的例子是windows版本,为了方便
5.下载解压之后双击运行bin目录下win64下activemq.bat
6.运行完毕之后打开web控制台进行查看验证 , 网页地址栏输入 : http://localhost:8161/admin user : admin pwd : admin
7.创建两个工程A和工程B编写测试类 :
A
- package activemqA;
-
- 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 Sender {
-
- public static void main(String args[]){
-
- Sender sender = new Sender();
- sender.sendMessage("hello,activemqB");
-
- }
-
- public void sendMessage(String msg){
-
- ConnectionFactory connectionFactory = null;
- Connection connection = null;
- Session session = null;
-
- try {
-
- connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
-
- connection = connectionFactory.createConnection();
-
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Destination destination = session.createQueue("myQueue");
-
- MessageProducer messageProducer = session.createProducer(destination);
-
- TextMessage textMessage = session.createTextMessage(msg);
-
- messageProducer.send(textMessage);
- } catch (JMSException e) {
- e.printStackTrace();
- }finally{
-
- try {
- if(connection !=null){
- connection.close();
- }
- if (session !=null) {
- session.close();
- }
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
- }
检验消息是否发送成功请查看:web控制台会显示条数
B
- package activemqB;
-
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.MessageConsumer;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.activemq.ActiveMQConnectionFactory;
-
-
- public class Receiver {
-
- public static void main(String args[]){
-
- Receiver receiver = new Receiver();
- receiver.receiverMessage();
- }
-
- public void receiverMessage(){
-
- ConnectionFactory connectionFactory = null;
- Connection connection = null;
- Session session =null;
-
- try {
-
- connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
-
- connection = connectionFactory.createConnection();
-
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Destination destination = session.createQueue("myQueue");
-
- MessageConsumer messageConsumer = session.createConsumer(destination);
-
- connection.start();
-
- TextMessage textMessage = (TextMessage) messageConsumer.receive(1000);
-
- System.out.println("接收到的消息为:"+textMessage.getText());
- } catch (JMSException e) {
- e.printStackTrace();
- }finally {
- try {
- if (connection !=null) {
- connection.close();
- }
- if (session !=null) {
- session.close();
- }
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
- }
8.温馨提示:需要注意的是在编写生产者时创建文本应把msg参数放进去,否则消费者这边输出是null