JMS实战——ActiveMQ
安装
官网下载地址:http://activemq.apache.org/
小编这里以5.9.0版本为例,做简单介绍。
下载之后解压到制定路径,目录结构如下:
启动
直接运行bin下的activemq.bat,出现如下界面。
浏览器输入http://localhost:8161进行访问,这只是一个安装成功的页面。一般用admin访问,在地址后加/admin,用户名和密码都是admin。
如下图:
实现PTP
JMS有两种消息模型:PTP和Pub/Sub。这里以第一种简单的为例,来感性的了解下。
新建Queue:
代码实现:
整个过程涉及到消息的生产者(发出消息)、消息的消费者(接收消息)、JMS服务器(负责通信的支持,这里使用的是activeMQ的支持)。
消息的生产者 Sender
public class Sender {
    //消息个数
    private static final int SEND_NUMBER = 5;
    public static void main(String[] args) {
        //初始化开始,包括连接工厂、连接、会话、消息目的、消息生产者
        ConnectionFactory connectionFactory;
        Connection connection = null;
        Session session;
        Destination destination;
        MessageProducer producer;
        //创建连接工厂,使用默认用户名和密码。这里tcp://localhost:61616为连接地址,当然也可以使用默认地址。
        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
        try {
            // 构造从工厂得到连接对象
            connection = connectionFactory.createConnection();
            // 启动
            connection.start();
            // 获取操作连接
            session = connection.createSession(Boolean.TRUE,
                    Session.AUTO_ACKNOWLEDGE);
            //创建一个名称为TestQueue的消息队列
            destination = session.createQueue("TestQueue");
            //得到producer
            producer = session.createProducer(destination);
            // 设置不持久化
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            // 构造消息
            sendMessage(session, producer);
            session.commit();
        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != connection)
                    connection.close();
            } catch (Throwable ignore) {
            }
        }
    }
    private static void sendMessage(Session session, MessageProducer producer) throws JMSException {
        for (int i = 0; i < SEND_NUMBER; i++) {
            TextMessage message=session.createTextMessage("I am a Producer"+i);
            System.out.println("发送消息:"+message.getText());
            //发送给制定用户
            message.setStringProperty("username", "A");
            producer.send(message);
        }
    }
}
这里采用的是发送给指定用户(username=“A”),当然,也可以不加限制,只要在同一消息队列中的消费者都可以接收。
消息的消费者 Receiver
try {
            String clientId = "003";
            connection = connectionFactory.createConnection();
            // 设置客户端id
            connection.setClientID(clientId);
            connection.start();
            // 创建会话
            session = connection.createSession(Boolean.FALSE,
                    Session.AUTO_ACKNOWLEDGE);
            // 使用同一个消息队列
            destination = session.createQueue("TestQueue");
            // consumer=session.createConsumer(destination);
            // 指定当前登录的标识
            consumer = session.createConsumer(destination, "username='A'");
            while (true) {
                // 接收消息
                TextMessage message = (TextMessage) consumer.receive(1000000);
                if (null != message) {
                    System.out.println("clientID:" + connection.getClientID()
                            + " 收到消息:" + message.getText());
                } else {
                    break;
                }
            }
        } catch (Exception e) {
            try {
                if (null != connection)
                    connection.close();
            } catch (Throwable ignore) {
            }
        }
控制台显示:
浏览器中查看Queue状态:
在TestQueue队列中,5个消息入队,5个消息出队。
JMS实战——ActiveMQ的更多相关文章
- JMS实战——ActiveMQ实现Pub-Sub
		
前言 上篇博客<JMS实战--ActiveMQ>介绍了ActiveMQ的安装,并实现了简单的PTP模型.这篇博客我们来看一下Pub-Sub模型,之后来总结一下JMS. 实现 项目结构 其中 ...
 - Java架构师系统培训高并发分布式电商实战activemq,netty,nginx,redis dubbo shiro jvm虚拟机视频教程下载
		
15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 ...
 - 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
		
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
 - 【JMS】JMS之ActiveMQ的使用
		
这篇文章主要是简单介绍一下JMS和ActiveMQ,以及使用ActiveMQ来写两个demo. 1. JMS是啥 百度百科的解释: JMS即Java消息服务(Java Message Service) ...
 - ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯
		
本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...
 - Simple guide to Java Message Service (JMS) using ActiveMQ
		
JMS let’s you send messages containing for example a String, array of bytes or a serializable Java o ...
 - JMS and ActiveMQ first lesson(转)
		
JMS and ActiveMQ first lesson -- jms基础概念和应用场景 2011-6-18 PM 9:30 主讲:kimmking <kimmking@163.com> ...
 - spring集成JMS访问ActiveMQ
		
首先我们搭建一个spring-mvc项目,项目可以参考:spring-mvc 学习笔记 步骤: 在pom.xml中加上需要的包 修改web.xml,增加IOC容器 spring配置文件applicat ...
 - JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接
		
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/69046395 解决使用activemq时抛出的异常:javax.j ms.JMSE ...
 
随机推荐
- MySQL 避免行锁升级为表锁——使用高效的索引
			
文章目录 普通索引 属性值重复率高 属性值重复率低 小结 众所周知,MySQL 的 InnoDB 存储引擎支持事务,支持行级锁(innodb的行锁是通过给索引项加锁实现的).得益于这些特性,数据库支持 ...
 - udt通信java再次升级1.1版
			
以前完成了udt的java代码测试,功能基本完成,近几天有时间重新梳理了下源码: 对原通信的关闭统一了方法,close定位过时,由shutdown与shutdownNow代替. 将一些主要方法添加了注 ...
 - 技巧:Vimdiff 使用
			
技巧:Vimdiff 使用 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff.希望能对在 Unix ...
 - B. Train Seats Reservation 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
			
You are given a list of train stations, say from the station 1 to the station 100. The passengers ca ...
 - React学习(1)—— 基础项目搭建以及环境配置
			
首先,我们需要安装node.js,直接搜索并在官网下载安装包. node.js官网:https://nodejs.org/en/ 现在我们成功安装了node和npm,然后我们来用npm创建新的项目,首 ...
 - 为何企业钟爱H5响应式网站? html5响应式网站的优势与特点
			
随着移动互联网时代的到来,H5响应式网站应运而生,并成功获得了商家.访客.搜索引擎等的青睐!越来越多的企业也选择了H5响应式建站,可为何企业钟爱H5响应式网站呢?难道传统网站不好吗?这个不能妄下结论, ...
 - Python栈的学习资料
			
持续更新... 1. 基础 Python for Everybody的视频课程,称得上深入浅出 https://www.py4e.com/ 2. 进阶 偏重实践应用,快速上手,稀饭~ https:// ...
 - Linux基础(04)、功能配置(调整防火墙、静态IP、环境变量)
			
目录 一.centos防火墙 二.VMware网络连接方式 2.1.连接方式:桥接.NAT.仅主机 2.2.常见问题 三.centos配置静态IP 四.环境变量 4.1.什么是环境变量 4.2.临时修 ...
 - python应用:TXT文件的读写
			
python读写TXT文件不需要导入包 python中常用的读写方式: 文件打开模式 描述 r 以只读模式打开文件,并将文件指针指向文件头:如果文件不存在会报错 w 以只写模式打开文件,并将文件指针指 ...
 - 数据分析处理库Pandas——时间
			
时间戳 向后推的时间戳 备注:五天后的时间. 指定日期和时间 时间的Series结构 按要求显示时间(开始时间,时间间隔,时间个数) 转换为时间格式,并设置时间列为索引列 方法一 方法二 筛选显示 方 ...