JMS 简单实例

简介:

使用 ActiveMQ 当做 JMS 提供者,写一个简单的 demo。

主要是模拟一个聊天室的样子,下面是源代码

package com.mycompany.app;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/** * Hello world! * */
public class App implements MessageListener { 
   
    private TopicSession pubSession;    
    
    private TopicPublisher publisher;   
     
    private TopicConnection connection;    
    
    private String username;    
    
    private static String user = ActiveMQConnection.DEFAULT_USER;    
    
    private static String password = ActiveMQConnection.DEFAULT_PASSWORD;    
    
    private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;    
    
    public App(String username) throws Exception {        
        this.username = username;//聊天室的用户名
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(user, password, url);
        //创建ActiveMQ提供的链接工厂
        connection = factory.createTopicConnection();
        pubSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);        
        TopicSession subSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);           Topic topic = subSession.createTopic("myTopic");
        publisher = pubSession.createPublisher(topic);        
        TopicSubscriber subscriber = subSession.createSubscriber(topic, nulltrue);
        subscriber.setMessageListener(this);
        connection.start();
    }    
    
    public static void main(String[] args) throws Exception {        
        App app = new App(args[0]);        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));        
        while (true) {            
            String line = reader.readLine();            
            if ("exit".equals(line)) {
                app.close();
            } else {
                app.writeMessage(line);
            }
        }
    }    
    
    public void onMessage(Message msg) {        
        TextMessage message = (TextMessage) msg;        
        try {            
            System.out.println(message.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }    
    
    public void writeMessage(String textthrows Exception {        
        TextMessage message = pubSession.createTextMessage();
        message.setText(username + " : " + text);
        publisher.publish(message);
    }    public void close() throws Exception {
        connection.close();
    }
}


安装 ActiveMQ

mac 安装比较简单 brew install activemq

ActiveMQ 会被默认安装到 /usr/local/Cellar/activemq

先运行 activemq setup ~/.activemqrc 来指定 activemq 的环境配置文件。

运行 activemq start 可以在一个独立进程中启动 activemq

$ activemq start
INFO: Loading '/usr/local/Cellar/activemq/5.11.1/libexec/bin/env'
INFO: Using java '/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/usr/local/Cellar/activemq/5.11.1/libexec/data/activemq.pid' (pid '4880')


终止 ActiveMQ 的运行有两种方式。一种是使用 activemq stop。

另一种则是暴力的杀死进程,即 kill 4880。

运行

通过 maven 启动 3个 main 方法:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App" -Dexec.args="rcx1"
mvn exec:java -Dexec.mainClass="com.mycompany.app.App" -Dexec.args="rcx2"
mvn exec:java -Dexec.mainClass="com.mycompany.app.App" -Dexec.args="rcx3"

然后在其中一个里面说一句话,其他都会收到信息。

// rcx2
rcx1 : hello
hello two
rcx3 : 大家好

// rcx1
hello
rcx2 : hello two
rcx3 : 大家好

// rcx3
大家好
rcx1 : hello
rcx2 : hello two
目录
相关文章
JMS的常用方法
import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.
785 0
|
6月前
|
消息中间件 Java API
RabbitMQ入门指南(五):Java声明队列、交换机以及绑定
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。
261 0
|
消息中间件 Java 数据库连接
03JMS简介
03JMS简介
52 0
|
消息中间件 搜索推荐 Java
消息中间件JMS介绍、入门demo与spring整合
消息中间件JMS介绍、入门demo与spring整合
363 7
消息中间件JMS介绍、入门demo与spring整合
|
前端开发 Java 数据库
JMS 作用| 学习笔记
快速学习 JMS 作用
JMS 作用| 学习笔记
|
消息中间件 SQL XML
ActiveMQ系列:详细讲讲JMS(Java Messaging Service)
一条持久性的消息:应该被传送“一次仅仅一次”,这就意味者如果JMS提供者出现故障,该消息并不会丢失,它会在服务器恢复之后再次传递。一条非持久的消息:最多会传送一次,这意味这服务器出现故障,该消息将永远丢失。
217 0
ActiveMQ系列:详细讲讲JMS(Java Messaging Service)
|
消息中间件
.net平台的rabbitmq使用封装(二)
.net平台的rabbitmq使用封装(二)
357 0
.net平台的rabbitmq使用封装(二)
|
消息中间件 存储
.net平台的rabbitmq使用封装(一)
.net平台的rabbitmq使用封装(一)
421 0
.net平台的rabbitmq使用封装(一)
|
消息中间件 Java 应用服务中间件
【EJB学习笔记】——JMS和消息驱动Bean
 认识消息驱动Bean之前,先了解一下JMS。
【EJB学习笔记】——JMS和消息驱动Bean
|
前端开发 Java 开发者
JMS作用|学习笔记
快速学习JMS作用
JMS作用|学习笔记