Activemq 是一款开源的消息中间件,适合中小型应用使用,遵循JMS规范。

具体介绍这里就不再阐述了,这里简单说下消息中间件的好处

1请求结果异步处理

客户端发送请求以后,服务器可以把相关数据放到消息中间件上,不一定马上处理

2解耦

client进程和server服务进程都不一定同时可用。

3不仅支持1对1通信,也支持1对多通信

另外我想说的是,JMS只是定义了接口,并没有给出实现。以下是jms相关的术语介绍

Provider(MessageProvider):生产者 生产消息

Consumer(MessageConsumer):消费者 发送消息

PTP:Point To Point,点对点通信消息模型

Pub/Sub:Publish/Subscribe,发布订阅消息模型

Queue:消息队列,和PTP结合

Topic:消息主题,和Pub/Sub结合

ConnectionFactory:连接工厂,JMS用它创建Connnection

Connnection:JMS Client到JMS Provider的连接,用于创建session

Destination:消息目的地,由Session创建

Session:会话,由Connection创建,发送、接受消息的一个线程

快速入门

下载 http://activemq.apache.org/ 启动程序

windows系统 (根据你系统 bit的不同 选择不同的启动程序

启动完成以后,就可以访问控制台了,web 控制台可以通过

http://localhost:8161  需要输入用户名以及密码 (默认是admin  admin )

当然这个是可以修改的,默认这个是运行在jetty里面的

修改conf目录下的jetty-realm.properties

接下来,我们写第一个快速入门程序。具体来说,会有一个生产者用于发送消息,一个消费者用于接收消息。

引入jar包,我这里为了方便,直接引入的是activemq-all-5.9.0.jar

实际开发中 应该根据需求引入lib目录下的相关包

=============================================================================================================

生产者

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Producer {
public static void main(String[] args) throws Exception { ConnectionFactory factory = new ActiveMQConnectionFactory("cc","cz", ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
Connection connection = factory.createConnection();
// 默认是关闭的 需要开启
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = session.createQueue("test");
MessageProducer producer = session.createProducer(dest);
// 设置非持久化 服务器关闭消息就不再保存
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
TextMessage textMessage = session.createTextMessage();
textMessage.setText("I AM MESSAGE");
producer.send(textMessage);
try {
} finally {
if(connection!=null)
connection.close();
}
}
}

消费者

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory; public class Consumer {
public static void main(String[] args) throws Exception { ConnectionFactory factory = new ActiveMQConnectionFactory("cc", "cz",
ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
Connection connection = factory.createConnection();
// Connection默认是关闭的 需要开启
connection.start();
// 设置是否支持事务 和 签收模式
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = session.createQueue("test");
MessageConsumer consumer = session.createConsumer(dest);
while (true) {
//因为这里我们知道发送的是TextMessage 所以没有做类型判断 类型判断可以用 instanceof
TextMessage mes = (TextMessage) consumer.receive();
// mes.acknowledge(); 签收消息
System.out.println(mes.getText());
} } }

  

运行生产者 ,在运行消费者(先后顺序是没有关系的,我这里并没有让消费者停止运行)

详细api介绍

1安全认证,我们不能让谁都去链接我们的mq服务器,这里我们可以在activemq.xml配置用户名密码 认证

 2conection一定要关闭,不然mq不会释放资源。

 3我们通过connection创建session对象的时候,有两个参数

分别是指 是否支持事务以及消息的签收模式

签收模式有三种

Session.AUTO_ACKNOWLEDGE 自动签收 当客户端从recive方法或者onMessage成功返回时 就签收

Session.CLIENT_ACKNOWLEDGE 需要调用Message调用acknowledge消息才会签收【实际开发中,我们一般使用这种方式】

Session.DUPS_OK_ACKNOWLEDGE 不必确认对消息的签收,可能会有消息的重复,但是提高了性能。

4 Producer的send方法

上面的代码中,我们先后指定了目的地,持久化方式,实际上这些都可以不必指定的,而是到send的时候指定。而且在实际业务开发中,往往根据各种判断,来决定将这条消息发往哪个Queue,因此往往不会在MessageProducer创建的时候指定Destination。

TTL,消息的存活时间,一句话:生产者生产了消息,如果消费者不来消费,那么这条消息保持多久的有效期

priority,消息优先级,0-9。0-4是普通消息,5-9是加急消息,消息默认级别是4。注意,消息优先级只是一个理论上的概念,也就是说ActiveMQ并不能保证消费的顺序性!

deliveryMode,如果不指定,默认是持久化的消息。如果可以容忍消息的丢失,那么采用非持久化的方式,将会改善性能、减少存储的开销

当然我们也可以修改消息持久化方式,默认是kahadb

可以修改为mysql ,不过一般不推荐mysql 。

可以使用leveldb,毕竟这些数据库的性能要较MySQL更高些,事实上我们并不关心消息的“可视化”,更加关心的是消息在持久化的同时更加高效!

activeMq-1 快速入门的更多相关文章

  1. SpringBoot整合ActiveMQ快速入门

    Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  8. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. 黄聪:AngularJS最理想开发工具WebStorm

    Aug 29, 2013 Tags: angularangular.jsangularjswebstorm Comments: 23 Comments AngularJS最理想开发工具WebStorm ...

  2. linux 磁盘 扩展分区

  3. PAT 乙级 1091 N-自守数 (15 分)

    1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 ...

  4. websocket简单理解

    实现及原理 Websocket是一种在单个TCP连接上进行全双工通讯的协议. WebSocket 首先发起一个 HTTP 请求,在请求头加上 `Upgrade` 字段,该字段用于改变 HTTP 协议版 ...

  5. python中定时任务

    今天看网络框架时,突然想看一下定时器,于是往上搜索了一下python中timer task的实现,但是由于python本身对线程的支持不是太好,因为全局排它锁的存在,使得多线程在访问资源时效率比较低. ...

  6. gentoo usb serial ch340 16进制读写

    首先安装包含 lsusb 命令的 usbutils, emerge -v usbutils. 使用 lsusb后,可以查看到 ch340 的信息: Bus 001 Device 004: ID 1a8 ...

  7. BASEDIR

    1)正常写python程序会有一个可执行的bin.py文件,假如这个文件需要导入my_module里面定义的模块,应该怎么设置sys.path(此时可以直接导入), 因为bin和model属于同级目录 ...

  8. java 流转换BASE64的一些问题

    java 转换BASE64过程中,出现很多结尾为空的问题!暂时不清楚为什么会这样- ``` java //根据url地址转换成BASE64 public static String getURLIma ...

  9. phpstorm 不能自动打开上次的历史文件

    问题产生的原因:可能是电脑非正常关机,导致phpstrom 无法正常关闭. 一开始我以为是配置上那里出现了问题,所以直接就把配置删除了,然后生成了默认配置.发现还是无法解决问题.然后一个个配置查阅过去 ...

  10. week07 13.3 NewsPipeline之 三News Deduper之 tf_idf 查重

    我们运行看结果 安装包sklearn 安装numpy 安装scipy 终于可以啦 我们把安装的包都写在文件里面吧 4行4列 轴对称 只需要看一半就可以 横着看 竖着看都行 数值越接近1 表示越相似 我 ...