ActiveMQ的安装与启动

1 下载ActiveMQ:http://activemq.apache.org/download.html

2 下载后解压到任意文件夹,解压后文件夹内的目录为:

3 进入bin目录下的win64目录,运行activemq.bat程序,启动前需要设置jdk的环境变量,启动后如图所示:

在浏览器中输入http://localhost:8161/admin验证,需要输入用户名和密码登录,都为admin,登录后界面:

在conf目录下的jetty.xml中可以配置登录的用户名密码和端口号

<bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">
<property name="name" value="BASIC" />
<property name="roles" value="user,admin" />
<!-- set authenticate=false to disable login -->
<property name="authenticate" value="true" />
</bean>

设置authenticate为false时,登录不用输入用户名和密码;roles指的是登录的用户角色,这些角色在jetty-realm.properties文件中配置

<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>

port的值设置登录的端口号

ActiveMQ代码测试

1 新建一个java工程,结构如下:

2 消息发送者代码:

package com.cn.active;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; public class JMSProducer {
//默认连接用户名和默认连接密码,在conf文件夹下的credentials.properties文件中配置
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
//默认连接地址
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
//连接工厂
static ConnectionFactory connectionFactory;
//连接
static Connection connection;
//会话 接受或者发送消息的线程
static Session session;
//消息的目的地
static Destination destination;
//消息生产者
static MessageProducer messageProducer;
//消息内容
static TextMessage textMessage; static {
//实例化连接工厂,仅在启动时加载
connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);
} public static void main(String[] args){
try {
//通过连接工厂获取连接
connection = connectionFactory.createConnection();
//启动连接
connection.start();
/*
* 创建session
* 第一个参数指是否使用事务:
* 当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,没有回应则抛出异常,消息发送者负责处理这个错误
* 第二个参数指参数的确认模式:
* AUTO_ACKNOWLEDGE:消息提供者每次收到消息时自动发送确认,消息只向目标发送一次,传输过程中可能因为错误丢失消息
* CLIENT_ACKNOWLEDGE:由消息接收者确认收到消息,通过调用消息的acknowledge()方法通知消息提供者收到了消息
* DUPS_OK_ACKNOWLEDGE:消息提供者在消息接收者没有确认发送时重新发送消息(这种模式不在乎接收者收到重复的消息)
*/
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//创建一个名称为test的消息队列
destination = session.createQueue("test");
//创建消息生产者
messageProducer = session.createProducer(destination);
//发送消息
sendMessage(session,messageProducer);
session.commit();
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void sendMessage(Session session,MessageProducer messageProducer){
try {
for(int i=0;i<2;i++){
//创建一条文本消息
textMessage = session.createTextMessage("activeMQ"+i);
System.out.println("activeMQ"+i);
//通过消息生产者发出消息
messageProducer.send(textMessage);
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

运行后监视台显示一个test队列和二条消息:

3 消息接收者代码:

package com.cn.active;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; public class JMSConsumer {
//默认连接用户名和默认连接密码,在conf文件夹下的credentials.properties文件中配置
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
//默认连接地址
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
//连接工厂
static ConnectionFactory connectionFactory;
//连接
static Connection connection;
//会话 接受或者发送消息的线程
static Session session;
//消息的目的地
static Destination destination;
//消息消费者
static MessageConsumer messageConsumer;
//消息内容
static TextMessage textMessage; static {
//实例化连接工厂,仅在启动时加载
connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);
} public static void main(String[] args){
try {
//通过连接工厂获取连接
connection = connectionFactory.createConnection();
//启动连接
connection.start();
/*
* 创建session
* 第一个参数指是否使用事务:
* 当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,没有回应则抛出异常,消息发送者负责处理这个错误
* 第二个参数指参数的确认模式:
* AUTO_ACKNOWLEDGE:消息提供者每次收到消息时自动发送确认,消息只向目标发送一次,传输过程中可能因为错误丢失消息
* CLIENT_ACKNOWLEDGE:由消息接收者确认收到消息,通过调用消息的acknowledge()方法通知消息提供者收到了消息
* DUPS_OK_ACKNOWLEDGE:消息提供者在消息接收者没有确认发送时重新发送消息(这种模式不在乎接收者收到重复的消息)
*/
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//创建一个名称为test的消息队列
destination = session.createQueue("test");
//创建消息消费者
messageConsumer = session.createConsumer(destination); while(true){
//接收消息,参数表示接收消息的超时时间,为0表示不超时,receive返回下一个消息
//若超时了或者消费者被关闭了,返回null
textMessage = (TextMessage) messageConsumer.receive(1000);
if (textMessage != null) {
System.out.println("接收:"+textMessage.getText());
}else{
break;
}
}
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

运行后监视台变为:

ActiveMQ的特性和使用情况

ActiveMQ特性列表

1 多种语言和协议编写客户端。语言: 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可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
  4 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
  5 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  6 支持通过JDBC和journal提供高速的消息持久化
  7 从设计上保证了高性能的集群,客户端-服务器,点对点
  8 支持Ajax
  9 支持与Axis的整合
  10 可以很容易得调用内嵌JMS provider,进行测试

什么情况下使用ActiveMQ?

1 多个项目之间集成
     (1) 跨平台
     (2) 多语言
     (3) 多项目
  2 降低系统间模块的耦合度,解耦
     (1) 软件扩展性
  3 系统前后端隔离
     (1) 前后端隔离,屏蔽高安全区

ActiveMQ测试实例的更多相关文章

  1. ActiveMQ介绍和ActiveMQ入门实例

    ActiveMQ百度百科   ActiveMQ入门实例-cnblogs.com      作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通

  2. JMeter学习-026-JMeter 分布式(远程)参数化测试实例

    以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...

  3. webservice测试实例

    webservice测试实例(LR8.1) 接口声明:这个接口是sina的短信服务接口,我只是用来做脚本学习使用,不会对其产生压力:希望读者也只是用来进行录制学习,而不是产生压力. 接口文档:http ...

  4. [原]在Fedora中编译Libevent测试实例

    在我的昨天的博文<[原]我在Windows环境下的首个Libevent测试实例>中介绍了在Windows环境下如何编译一个echo server例子.今天我又试了一下在Linux环境中编译 ...

  5. C++动态链接库测试实例

    前话 上一章节我导出了一个动态链接库 要使用该链接库,我们还需要该链接库对外公开的函数,即头文件 下面开始实例 测试实例 第一步--将动态链接库的dll.lib.和头文件导入项目中 文件目录如下: 项 ...

  6. Linux下简易蜂鸣器驱动代码及测试实例

    驱动代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ...

  7. 微服务架构 - 离线部署k8s平台并部署测试实例

    一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...

  8. WinForm中 Asp.Net Signalr消息推送测试实例

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  9. Confluence 6 从生产环境中恢复一个测试实例

    请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明. 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 ...

随机推荐

  1. vue.js--基础事件定义,获取数据,执行方法传值

    <template> <div id="app"> <h1>{{ msg }}</h1> <br> <button ...

  2. 模拟,找次品硬币,Counterfeit Dollar(POJ 1013)

    题目链接:http://poj.org/problem?id=1013 解题报告: 1.由于次品的重量不清楚,用time['L'+1]来记录各个字母被怀疑的次数.为负数则轻,为正数则重. 2.用zer ...

  3. Python Day 15 递归、匿名函数、内置函数

    阅读目录 内容回顾 生成器的send方法 递归 匿名函数 内置函数 ##内容回顾 #1.带参装饰器 - 自定义 | wraps def wrap(info) def outer1(func): fro ...

  4. 课堂笔记-------字符串类型string------练习

    字符串类型 一.string //打出s.时就会出现一堆的方框,要找不带箭头的(不带箭头的是我们现在可以用的到的),不要找带箭头的(带箭头的是扩展,现在还用不到) //不带箭头的都是对s的操作(动作和 ...

  5. 对selenium自动化框架重构

    近期在编写自动化脚本的时候发现以前写的部分不是特别友好,在此进行重构.废话不说 搭建自动化框架,首先先理清思路: 使用的技术python+unittest+selenium+excel 文件目录有: ...

  6. SqlSugar之DbContext

    创建一个DbContext和DbSet进行使用,我们可以在DbSet中进行扩展我们的方法 //可以直接用SimpleClient也可以扩展一个自个的类 //推荐直接用 SimpleClient //为 ...

  7. 常用的linux指令整理

    ls 列出文件目录 -a全部文件,连同隐藏文件一起列出 -d仅列出目录本身,而不是列出目录内的文件数据 -l 连同权限一同列出 cd 切换文件目录的命令 pwd显示目前所在的目录 mkdir 创建新的 ...

  8. jquery mobile 移动web(5)

    有序列表 <div data-role="content"> <ol data-role="listview" data-theme=&quo ...

  9. 百度 suggestion 学习demo

    其他说明文字就不用写那么多了,代码很简单,相信各位道友都能看懂,看不懂的琢磨一下就可以看懂啦.贴代码!拷贝到自己的电脑中运行文件即可,不需要服务器. <!DOCTYPE html> < ...

  10. 2018 Wannafly summer camp Day2--Utawarerumono

    Utawarerumono 描述 题目描述: 算术是为数不多的会让久远感到棘手的事情.通常她会找哈克帮忙,但是哈克已经被她派去买东西了.于是她向你寻求帮助. 给出一个关于变量x,y的不定方程ax+by ...