安装

官网下载地址: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的更多相关文章

  1. JMS实战——ActiveMQ实现Pub-Sub

    前言 上篇博客<JMS实战--ActiveMQ>介绍了ActiveMQ的安装,并实现了简单的PTP模型.这篇博客我们来看一下Pub-Sub模型,之后来总结一下JMS. 实现 项目结构 其中 ...

  2. Java架构师系统培训高并发分布式电商实战activemq,netty,nginx,redis dubbo shiro jvm虚拟机视频教程下载

    15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 ...

  3. 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  4. 【JMS】JMS之ActiveMQ的使用

    这篇文章主要是简单介绍一下JMS和ActiveMQ,以及使用ActiveMQ来写两个demo. 1. JMS是啥 百度百科的解释: JMS即Java消息服务(Java Message Service) ...

  5. ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯

    本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...

  6. 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 ...

  7. JMS and ActiveMQ first lesson(转)

    JMS and ActiveMQ first lesson -- jms基础概念和应用场景 2011-6-18 PM 9:30 主讲:kimmking <kimmking@163.com> ...

  8. spring集成JMS访问ActiveMQ

    首先我们搭建一个spring-mvc项目,项目可以参考:spring-mvc 学习笔记 步骤: 在pom.xml中加上需要的包 修改web.xml,增加IOC容器 spring配置文件applicat ...

  9. JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/69046395 解决使用activemq时抛出的异常:javax.j ms.JMSE ...

随机推荐

  1. span没有name属性

    <span id="test" name="测试数据">测试咯</span> 在eclipse中这么写发现会有警告提示.百度发现原来sp ...

  2. Redux学习笔记-----基础部分

    Redux的基本原则 唯一数据源(应用的状态数据应该只存储在唯一的一个store上): 保持状态只读(不能直接修改Store的状态,而是应该通过派发一个action对象来完成) 数据改变只能通过纯函数 ...

  3. mybatis <fireach> 拼接sql语句 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'in'. Cause:

    <select id="getUserIn" parameterType="QueryVo" resultMap="userMap"& ...

  4. HTTP状态保持的原理

    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied) ...

  5. maven 打包失败 提示找不到jar的问题

    服务打包的时候发现打包失败,查看原因大概是找不到jar包,但是本地仓库有.最终的解决的办法是使用maven 命令重新把jar包安装到本地仓库. 命令如下:mvn install:install-fil ...

  6. django项目创建requirements.txt文件

    workon+虚拟环境名 然后输入 pip freeze > requirements.txt

  7. django 面试题

    面试题1:migrate怎么判断哪些迁移脚本需要执行: 他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移 ...

  8. Spring笔记2

    Bean生命周期 1 实例化 2 注入属性 3 BeanNameAware 4 BeanFactoryAware 5 ApplicationContextAware 6 BeanPostProcess ...

  9. thinkphp 3.2中依靠关联模型来关联三个表

    这里说的是用thinkphp3.2关联模型关联三个表 根据用户表查询出三个表的数据,需要两个model来配合,第一个model是根据user表来查询到班级的信息,然后第二个model是根绝banji中 ...

  10. Mysql基础1-基础语法-字段类型

    主要: 基础 字段类型 基础 基本概念 1) 数据库分类 层次数据库,网状数据库,关系数据库 常见:SQL Server, Oracle,infomix,sybase,ibmDB2,Mysql 2)数 ...