apache ActiveMQ之初体验
版权声明: https://blog.csdn.net/zdp072/article/details/27237549
一. 开篇语
继上一篇weblogic中使用jms发送和接受消息的文章后, 本文使用apache的一个开源组件ActiveMQ接着探讨JMS的话题, 本篇仅仅是ActiveMQ的一个入门的样例,
希望对您有所帮助.
二. ActiveMQ
1. ActiveMQ简单介绍:
ActiveMQ是Apache的一个能力强劲的开源消息总线, 它全然支持JMS1.1和JavaEE1.4规范的JMS Provider实现.
2. ActiveMQ特性:
1.) 多种语言和协议编写client。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。
应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2.) 全然支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3.) 对Spring的支持,ActiveMQ能够非常easy内嵌到使用Spring的系统里面去,并且也支持Spring2.0的特性
4.) 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測试,当中通过JCA 1.5 resourceadaptors的配置,
能够让ActiveMQ能够自己主动的部署到不论什么兼容J2EE1.4商业服务器上
5.) 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6.) 支持通过JDBC和journal提供快速的消息持久化
7.) 从设计上保证了高性能的集群,client-服务器,点对点
8.) 支持Ajax
9.) 支持与Axis的整合
10.) 能够非常easy得调用内嵌JMS provider,进行測试
3. 环境准备:
1.) 下载ActiveMQ:
http://activemq.apache.org/download.html, 我下载的是apache-activemq-5.2.0
2.) 执行ActiveMQ server
解压缩下载好的文件, 双击bin/activemq.bat 启动server, ActiveMQ内置了jetty服务器, 默认使用TCP连接port为61616.
ActiveMQ提供一个用于监控ActiveMQ的admin应用: http://127.0.0.1:8161/admin
3.) 在Eclipse中建立Javaproject, 并导入activemq-all-5.2.0.jar包
4.) 新建两个Java类: 消息生产者MsgSender和消息消费者MsgReceiver
4. 代码測试(P2P):
1.) 消息生产者: MsgSender
/**
* Message Provider
*/
public class MsgSender {
// ConnectionFactory: use to create JMS connection
private static ConnectionFactory connectionFactory;
// Connection: connect message provider and JMS server
private static Connection connection;
// Session: a message send or receive thread
private static Session session;
// Destination: use to sign the message type
private static Destination destination;
// MessageProducer:sender
private static MessageProducer messageProducer;
/**
* init the JMS object
*/
public static void init() throws Exception {
// use ActiveMQ to to create connection factory.
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
// get the connection from connection factory
connection = connectionFactory.createConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
messageProducer = session.createProducer(destination);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
connection.start();
}
/**
* send activeMq message
*/
public static void sendMessage() throws Exception {
for (int i = 1; i <= 5; i++) {
TextMessage message = session.createTextMessage("ActiveMq message " + i);
System.out.println("send:" + "ActiveMq message " + i);
messageProducer.send(message);
}
session.commit();
}
/**
* release resource
*/
public static void release() throws Exception {
messageProducer.close();
session.close();
connection.close();
}
/**
* main method
*/
public static void main(String[] args) throws Exception {
init();
sendMessage();
release();
}
}
2.) 消息消费者: MsgReceiver
/**
* Message Consumer
*/
public class MsgReceiver {
// ConnectionFactory: use to create JMS connection
private static ConnectionFactory connectionFactory;
// Connection: connect message provider and JMS server
private static Connection connection;
// Session: a message send or receive thread
private static Session session;
// use to sign the message type
private static Destination destination;
// MessageConsumer: receiver
private static MessageConsumer messageConsumer;
/**
* init the JMS object
*/
public static void init() throws Exception {
// use ActiveMQ to to create connection factory.
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
// get the connection from connection factory
connection = connectionFactory.createConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
messageConsumer = session.createConsumer(destination);
connection.start();
}
/**
* receive activeMq message
*/
public static void receiveMessage() throws Exception {
while (true) {
TextMessage message = (TextMessage) messageConsumer.receive();
if (message != null) {
System.out.println("receive: " + message.getText());
} else {
break;
}
}
}
/**
* release resource
*/
public static void release() throws Exception {
messageConsumer.close();
session.close();
connection.close();
}
/**
* main method
*/
public static void main(String[] args) throws Exception {
init();
receiveMessage();
release();
}
}
3.) 源代码下载地址: http://download.csdn.net/detail/zdp072/7422401
apache ActiveMQ之初体验的更多相关文章
- JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中
JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...
- Apache Beam入门及Java SDK开发初体验
1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Flume日志采集系统——初体验(Logstash对比版)
这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...
- Flume 实战(1) -- 初体验
前言: Flume-ng是数据收集/聚合/传输的组件, Flume-ng抛弃了Flume OG原本繁重的zookeeper和Master, Collector, 其整体的架构更加的简洁和明了. 其基础 ...
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- JAVA 11初体验
JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...
- spring cloud 初体验
spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有 ...
- 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验
----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafk ...
随机推荐
- thinkphp 查询单个“年-月-日” FROM_UNIXTIME
*时间格式转换,使datetimepicker.js 能够搜索 查询 单个 年月日而不需是区间 查询. //另起一行看转换结果 select *,FROM_UNIXTIME(CreateTime,'% ...
- JVM内存问题定位
一.查看机器资源使用状态: 使用top命令,内存占用较高的那个PID对应的进程一般就是JVM了 二.查看Swap状态: 使用free -m 命令,一般内存占用过高会导致swap占用也偏高,看看swap ...
- dubbo学习思路梳理
dubbo要解决的问题 rpc调用需要定制.额外的工作量 分布式服务中,服务动辄几十上百,相互之间的调用错综复杂,相互依赖严重 对集群性的服务,需要负载策略 对集群性的服务,能动态扩展节点 dubbo ...
- java泛型详解(加一点语法糖)
首先请看如下代码: public class Test{ public static void main(String str[]) { Hashtable h =new Hashtable(); h ...
- Codeforces Global Round1 简要题解
Codeforces Global Round 1 A 模拟即可 # include <bits/stdc++.h> using namespace std; typedef long l ...
- BZOJ2227 [Zjoi2011]看电影(movie)
Description \(k\)个座位,\(n\)个人依次过来,每人随机从\(k\)个座位中选择一个,并从它开始不停向后走直到遇到空座位坐下.求所有人都能坐下的概率(即没有人走到第\(k+1\)个位 ...
- asp.net web api 2 host in a windows service推荐阅读
最简单的例子(官方)在控制台app里面运行: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-h ...
- csv注入漏洞原理&&实战
前言 为了找工作,巩固巩固知识.本文会介绍 csv 注入漏洞的原理,最后给出一个示例. 正文 在 csv 文件 和 xlsx 文件中的每一项的值如果是 =, @, +, - 就会被 excel 识 ...
- INFO: Font Metrics and the Use of Negative lfHeight
INFO: Font Metrics and the Use of Negative lfHeight Print Email Article translations Article ID ...
- JS + jQuery 实现元素自动滚动到底部,兼容IE、FF、Chrome
HTML代码: <ul class="tasklog-dialog-ul" id="auto_to_bottom"> <li>删除虚拟机 ...