ActiveMQ学习教程(二)——简单示例

一。应用IDEA构建Maven项目

File-》New-》Module...-》Maven-》勾选-》选择-》Next -》

GroupId:com.jd.myMaven   |    ArtifactId:activeMQ    |    version:默认   -》Finish

项目构建成功!项目结构如下所示:

二。创建生产者类,模拟生产者发消息

Step1:java/activemq/JMSProducer.java

package activemq;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMapMessage; import javax.jms.*;
import java.util.Map; /**
* 消息生产者
*/
public class JMSProducer {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认的连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认的连接密码
private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认的连接地址
private static final int SENDNUM = 2;//发送的消息数量 public static void main(String[] args) {
ConnectionFactory connectionFactory = null;//连接工厂
Connection connection = null;//连接
Session session = null;//会话,接受或者发送消息的线程
Destination destination = null;//消息的目的地
MessageProducer messageProducer = null;//消息的生产者
//实例化连接工厂(指定连接用户名|密码|连接地址)
connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKERURL);
try {
connection = connectionFactory.createConnection();//通过连接工厂获取连接
connection.start();//启动连接
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//创建session
destination = session.createQueue("TestQueue");//创建消息队列
messageProducer = session.createProducer(destination);//创建消息生产者
sendMessage(session, messageProducer);//发送消息
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
} } //发送消息
private static void sendMessage(Session session, MessageProducer messageProducer) {
try {
//创建消息Map<key,value>
MapMessage message = session.createMapMessage();
message.setString("userName", "syf");
message.setInt("age", 30);
message.setDouble("salary", 1000);
message.setBoolean("isGirl", true);
System.out.println("Sending:" + ((ActiveMQMapMessage)message).getContentMap());
//发送消息
messageProducer.send(message);
} catch (JMSException e) {
e.printStackTrace();
}
}
}

Step2:启动ActiveMQ,运行生产者类,模拟生产消息

控制台显示:

Sending:{isGirl=true, userName=syf, salary=1000.0, age=30}

打开浏览器,访问activeMQ监控画面 http://127.0.0.1:8161/admin

【1】Queues

【2】Topics

三。模拟消费者消耗数据

package activemq;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMapMessage; import javax.jms.*; /**
* 消息消费者
*/
public class JMSConsumer {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认的连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认的连接密码
private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认的连接地址 public static void main(String[] args) {
ConnectionFactory connectionFactory = null;//连接工厂
Connection connection = null;//连接
Session session = null;//会话,接受或者发送消息的线程
Destination destination = null;//消息的目的地
MessageConsumer messageConsumer = null;//消息的消费者
//实例化连接工厂(指定连接用户名|密码|连接地址)
connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKERURL);
try {
connection = connectionFactory.createConnection();//通过连接工厂获取连接
connection.start();//启动连接
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//创建session
destination = session.createQueue("TestQueue");//创建连接的消息队列(TestQueue:生产者队列名)
messageConsumer = session.createConsumer(destination);//创建消息消费者
while (true) {
MapMessage mapMessage= (MapMessage) messageConsumer.receive(10000);
//TextMessage textMessage= (TextMessage) messageConsumer.receive(10000);//10秒接收
if (mapMessage != null) {
System.out.println("收到的消息:" + ((ActiveMQMapMessage)mapMessage).getContentMap());
} else {
System.out.println("没有消息:");
}
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}

运行代码:

控制台显示:收到的消息:{userName=syf, salary=1000.0, isGirl=true, age=30}

打开浏览器,查看activeMQ监控画面 http://127.0.0.1:8161/admin

【1】Queues(1条消息被消费)

【2】Topics

示例-----企业应用最常见方式之监听器监听方式

增加监听类JMSListener

package activemq;

import org.apache.activemq.command.ActiveMQMapMessage;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
/**
* 消息监听
* */
public class JMSListener implements MessageListener{
public void onMessage(Message message) {
try {
System.out.println("receive Message:"+((ActiveMQMapMessage)message).getContentMap());
} catch (JMSException e) {
e.printStackTrace();
}
}
}

重新模拟一个消费者,应用监听器监听消息

package activemq;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMapMessage; import javax.jms.*; public class JMSConsumerByListener {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认的连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认的连接密码
private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认的连接地址 public static void main(String[] args) {
ConnectionFactory connectionFactory = null;//连接工厂
Connection connection = null;//连接
Session session = null;//会话,接受或者发送消息的线程
Destination destination = null;//消息的目的地
MessageConsumer messageConsumer = null;//消息的消费者
//实例化连接工厂(指定连接用户名|密码|连接地址)
connectionFactory = new ActiveMQConnectionFactory(JMSConsumerByListener.USERNAME, JMSConsumerByListener.PASSWORD, JMSConsumerByListener.BROKERURL);
try {
connection = connectionFactory.createConnection();//通过连接工厂获取连接
connection.start();//启动连接
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//创建session
destination = session.createQueue("TestQueue2");//创建连接的消息队列(TestQueue:生产者队列名)
messageConsumer = session.createConsumer(destination);//创建消息消费者
messageConsumer.setMessageListener(new JMSListener());//注册消息监听
} catch (JMSException e) {
e.printStackTrace();
}
}
}

=》先执行生成者,生产消息!

控制台打印:Sending:{isGirl=true, userName=kaixin, salary=1000.0, age=30}

ActiveMQ监控画面显示:

=》再执行消费者,消费消息!

控制台打印:receive Message:{userName=kaixin, salary=1000.0, isGirl=true, age=30}

ActiveMQ监控画面显示:

OK!!!大功告成!

参考文章:

https://www.toutiao.com/a6345805464718409986/?tt_from=weixin&utm_campaign=client_share&app=news_article&utm_source=weixin&iid=18292470304&utm_medium=toutiao_android&wxshare_count=1

http://blog.csdn.net/xh16319/article/details/12142249

理论博客:http://www.cnblogs.com/Survivalist/p/8094069.html

ActiveMQ学习教程/2.简单示例的更多相关文章

  1. ActiveMQ学习教程/1.简要介绍与安装

    ActiveMQ学习教程(一)——简要介绍与安装 一.名词: 1.JMS:即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的 ...

  2. SharpDX之Direct2D教程I——简单示例和Color(颜色)

    研究Direct2D已经有一段时间了,也写了一个系列的文章 Direct2D ,是基于Windows API Code Pack 1.1.在前文 Direct2D教程VIII——几何(Geometry ...

  3. ActiveMQ学习教程

    一.activemq安装 官网地址:https://activemq.apache.org/ 具体安装过程不赘述,解压即安装, 二.使用 activemq有queue和topic两种模式, 我们以qu ...

  4. Tensorflow学习教程------softmax简单介绍

    做机器学习的同志们应该对这个都不陌生,这里简单举个例子.一般来说,使用softmax函数来将神经元输出的数值映射到0到1之间,这样神经元输出的值就变为了一个概率值. 公式和例子如下图 公式和例子如下图

  5. RecyclerView(5)官方教程带简单示例

    Create Lists The RecyclerView widget is a more advanced and flexible version of ListView. This widge ...

  6. Playmaker全面实践教程之简单的使用Playmaker示例

    Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...

  7. WebGL简易教程(一):第一个简单示例

    目录 1. 概述 2. 示例:绘制一个点 1) HelloPoint1.html 2) HelloPoint1.js (1) 准备工作 (2) 着色器 (3) 顶点着色器 (4) 片元着色器 (5) ...

  8. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  9. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

随机推荐

  1. Mvc Excel导入加事务加导出

    导出 public FileResult Input() { DataTable dt = new DataTable("dd"); using (SqlConnection co ...

  2. .NET mocking框架Telerik JustMock发布R2 2019|附下载

    Telerik JustMock是一个灵活.功能齐全的.NET mocking框架.Telerik JustMock能够简化单元测试,现在测试复杂的场景比以前更加容易了.同时JustMock还与Vis ...

  3. VirtualBox导入VmWare生成的.vmdk格式虚拟机镜像

    VmWare默认的镜像格式是.vmdk格式的,VirtualBox则默认是.vdi格式的.其实这在VirtualBox新建虚拟机的过程中是可选的. 导入.vmdk格式的镜像到VirtualBox只需要 ...

  4. 【NOIP2017提高组模拟12.10】幻魔皇

    题目 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白色节 ...

  5. priority_queue与multiset

    感觉c++最有用的stl是bitset.堆(优先队列)和平衡树,其他的都可以手打 这里主要讲一下堆和平衡树的基本用法和区别所在 priority_queue 堆/优先队列 定义: priority_q ...

  6. 定时器的写法 winform

    private void timer1_Tick(object sender, EventArgs e) { if ( tttttflag) { Action action = SyncCompany ...

  7. PHP入门培训教程 PHP变量及常量

         一.PHP5.4的基本语法格式 1.PHP的分割符 $php=true; //分号结束语句 if($php){ echo "真"; //分号结束语句 } //大括号结束语 ...

  8. new/delete和malloc/free区别与联系

    1.基本概念 malloc/free (1).函数原型及说明 void *malloc(long NumBytes): 该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则 ...

  9. psdash-为开发、测试人员提供简单的方法,在web界面查看服务器的运行情况(网络,带宽,磁盘,CPU), 同时可以在web界面查看日志

    psdash是linux的系统信息web指示板主要由使用数据psutil——由此得名. github地址:https://github.com/Jahaja/psdash 特性 安装 开始 配置 截图 ...

  10. Oracle生成ASH报告

    1.ASH (Active SessionHistory) ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件.不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成. v ...