首先先安装ActiveMQ:https://www.cnblogs.com/hejianliang/p/9149590.html

创建Java项目,把 activemq-all-5.15.4.jar 包导入到项目。

本次案例主要有两个角色,分别是 新闻发布者(NewsPublisher)、新闻订阅者(NewsSubscriber);发布者相当于 生产者,负责生产消息,订阅者相当于 消费者,负责接收消息。

新闻发布者(NewsPublisher)

package edu.activemq.publisher;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; /**
* 新闻发布者(生产者)
* @author Administrator
*
*/
public class NewsPublisher { /**
* ActiveMQ连接用户名
*/
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; /**
* ActiveMQ连接密码
*/
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; /**
* ActiveMQ连接地址
*/
private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL; /**
* 消息队列名称
*/
private static final String QUEUE_NAME = "MY_QUEUE"; /**
* 发布数量
*/
private static final Integer SEND_NUMBER = 5000; /**
* 发布新闻
*/
public static void main(String[] args) {
// 声明连接工厂
ConnectionFactory connectionFactory; // 声明连接
Connection connection = null; // 声明会话,接收或者发送信息的线程
Session session; // 声明消息的目的地
Destination destination; // 声明消息生产者
MessageProducer messageProducer; try {
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL); // 通过连接工厂创建 连接
connection = connectionFactory.createConnection(); // 启动连接
connection.start(); // 创建session 参数1:开启事物 参数2:消息确认方式
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); // 创建消息队列
destination = session.createQueue(QUEUE_NAME); // 创建消息生产者
messageProducer = session.createProducer(destination); // 发送消息
sendMessage(session, messageProducer); // 提交事务
session.commit();
} catch (Exception e) {
System.out.println("发布新闻失败.");
e.printStackTrace();
} finally {
// 关闭资源
if (null != connection) {
try {
connection.close();
} catch (Exception e) {
System.out.println("关闭资源失败.");
e.printStackTrace();
}
}
}
} /**
* 发送消息
* @param session
* @param messageProducer
*/
private static void sendMessage(Session session, MessageProducer messageProducer) {
// 声明消息对象
TextMessage textMessage; try {
for (int i = 0; i <= SEND_NUMBER; i++) {
// 创建消息
textMessage = session.createTextMessage("当前发送的新闻xxx, 编号为: " + i); // 发送消息
messageProducer.send(textMessage);
}
} catch (Exception e) {
System.out.println("发送新闻消息失败.");
e.printStackTrace();
}
} }

新闻订阅者(NewsSubscriber)

package edu.activemq.subscriber;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session; import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; import edu.activemq.listener.NewsSubscriberListener; /**
* 新闻订阅者(消费者)
* @author Administrator
*
*/
public class NewsSubscriber { /**
* ActiveMQ连接用户名
*/
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; /**
* ActiveMQ连接密码
*/
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; /**
* ActiveMQ连接地址
*/
private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL; /**
* 消息队列名称
*/
private static final String QUEUE_NAME = "MY_QUEUE"; public static void main(String[] args) {
// 声明连接工厂
ConnectionFactory connectionFactory; // 连接
Connection connection = null; // 会话
Session session; // 消息目的地
Destination destination; // 消息的消费者
MessageConsumer messageConsumer; // 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);
try {
// 获取连接
connection = connectionFactory.createConnection();
// 启动连接
connection.start(); // 获取Session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建连接的消息队列
destination = session.createQueue(QUEUE_NAME); // 创建消息的消费者
messageConsumer = session.createConsumer(destination); // 注册消息监听
messageConsumer.setMessageListener(new NewsSubscriberListener()); } catch (Exception e) {
e.printStackTrace();
}
} }

新闻监听器(NewsSubscriberListener)

package edu.activemq.listener;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; /**
* 新闻监听器
* @author Administrator
*
*/
public class NewsSubscriberListener implements MessageListener { @Override
public void onMessage(Message message) {
try {
// 创建文本消息对象
TextMessage textMessage = (TextMessage) message; // 输出监听到的消息
System.out.println("NewsSubscriberListener 监听到的消息: " + textMessage.getText());
} catch (Exception e) {
e.printStackTrace();
}
} }

  

新闻发布者(NewsPublisher):负责生产消息,将消息发送到队列里面去。

新闻订阅者(NewsSubscriber):负责消费消息,从消息队列里面取出消息。

新闻监听器(NewsSubscriberListener):新闻订阅者的一个监听器,辅助订阅者监听队列的消息。

运行结果:

发布新闻:

订阅者消费:

运行后,队列里的消息已经被订阅者消费了。

ActiveMQ第一个示例的更多相关文章

  1. 创建ArcGIS API for JavaScript的第一个示例程序

    原文:创建ArcGIS API for JavaScript的第一个示例程序 在上一篇博客中已经介绍了如何搭建ArcGIS API for JavaScript开发环境,如果您还没有搭建好开发环境的话 ...

  2. SkylineGlobe TerraExplorer Pro 7.0 Web 控件版 第一行示例代码

    SkylineGlobe TerraExplorer Pro 7.0 是原生的64位应用程序,在Web端用插件方式开发的第一行示例代码如下: 常规代码,需要IE64位: <!DOCTYPE ht ...

  3. ActiveMQ的P2P示例

    ActiveMQ的P2P示例(点对点通信) (1)下载安装activemq,启动activeMQ. 详细步骤参考博客:http://www.cnblogs.com/DFX339/p/9050878.h ...

  4. Kotlin协程第一个示例剖析及Kotlin线程使用技巧

    Kotlin协程第一个示例剖析: 上一次https://www.cnblogs.com/webor2006/p/11712521.html已经对Kotlin中的协程有了理论化的了解了,这次则用代码来直 ...

  5. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...

  6. ActiveMQ入门操作示例

    1. Queue 1.1 Producer 生产者:生产消息,发送端. 把jar包添加到工程中. 第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号. 第二步:使用Conn ...

  7. Java改写重构第2版第一个示例

    写在前面 <重构:改善既有代码的设计>是一本经典的软件工程必读书籍.作者马丁·福勒强调重构技术是以微小的步伐修改程序. 但是,从国内的情况来而论,"重构"的概念表里分离 ...

  8. ActiveMQ第一弹:安装与运行

    ActiveMQ使用java写的,所以天然跨平台,windows,各种类Unix系统都可运行,只需要下载对应的分发包即可.当前AciveMQ的最新版本是5.9.0.我目前在自己机子上安装的版本是5.8 ...

  9. ActiveMQ queue 代码示例

    生产者: package com.111.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; impo ...

随机推荐

  1. python类中的__init__和__new__方法

    Python中类: Python中在创建类的过程中最先调用的不是__init__方法而是__new__方法,__new__方法是一个静态方法,在创建一个类对象时其实是通过__new__方法首先创建出一 ...

  2. MySQL5.7用户创建及权限管理

    一 用户.权限管理 1.1 用户 作用: 登录,管理数据库逻辑对象 定义: 用户名@'主机值' 主机值可以是主机名或IP地址,主机值中允许使用通配符 root@'10.0.0.%' root@'%' ...

  3. Vue常用指令详解分析

    Vue入门 Vue是一个MVVM(Model / View / ViewModel)的前端框架,相对于Angular来说简单.易学上手快,近两年也也别流行,发展速度较快,已经超越Angular了.比较 ...

  4. 使用koa-log4管理nodeJs日志笔记

    前言 对于后端程序应用来说,日志是必不可少的,在nodeJs当中并没有自带的日志模块.最近正好使用koa框架来做后端服务,需要对日志进行分割处理,特记录下分享给大家. 一.后端代码目录结构 ├── b ...

  5. 3、JVM中的对象

    1.对象的创建 A  a = new A() A:引用的类型 a::引用的名称 new A():创建一个A类对象 当创建一个对象时,具体创建过程是什么呢? (1)JVM遇到new的字节码指令后,检查类 ...

  6. 图文并茂C++精华总结 复习和进阶

    字面常量不可以有引用,因为这也不需要使用符号来引用了,但是字面常量却可以初始化const引用,这将生成一个只读变量: 对变量的const修饰的引用是只读属性的: 也就是说,const修饰的引用,不管是 ...

  7. Tomcat 第五篇:请求处理流程(下)

    1. 请求处理流程 AprEndPoint 顺着上一篇接着聊,当一个请求发送到 Tomcat 以后,会由连接器 Connector 转送至 AprEndPoint ,在 AprEndPoint 中调用 ...

  8. C语言中最常用的标准库函数

    标准头文件包括: <asset.h>      <ctype.h>       <errno.h>       <float.h> <limits ...

  9. JVM 第二篇:垃圾收集器以及算法

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 0. 引言 一说到 JVM ,大多数人第一个想到的可能就是 GC ,今天我们就来聊一聊和 GC 关系最大的垃圾收集器以及垃圾收集算法,希望能通过 ...

  10. 如何选择JVM垃圾回收器?

    明确垃圾回收器组合 -XX:+UseSerialGC 年轻代和老年代都用串行收集器 -XX:+UseParNewGC 年轻代使用ParNew,老年代使用 Serial Old -XX:+UsePara ...