activemq 进不去admin页面_ActiveMQ学习

训练大纲(第086天)

大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。

第171次(ActiveMQ)

学习主题:ActiveMQ

学习目标:

1 掌握什么是MQ 什么是JMS

2 掌握ActiveMQ的安装与目录结构

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

1. ActiveMQ简介

(1) 什么是ActiveMQ?

ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 JMS 规范出台已经是很久的事情了,但是 JMS 在当今的 J2EE 应用中间仍然扮演着特殊的地位。

(2) 什么是消息?

“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。

(3) 什么是队列?

e444d3007c9761aa985f6853d9420496.png

(4) 什么是消息队列?

“消息队列”是在消息的传输过程中保存消息的容器。

(5) 常见的消息服务有哪些?

5.1ActiveMQ

ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现。

5.2RabbitMQ

RabbitMQ 是一个在 AMQP 基础上完成的,可复用的企业消息系统。他遵循 Mozilla Public License 开源协议。开发语言为 Erlang。

5.3RocketMQ

由阿里巴巴定义开发的一套消息队列应用服务。

2. 消息服务应用场景

(1) 消息服务可应用于哪些场景?

消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。

e444d3007c9761aa985f6853d9420496.png

3. JMS消息模型介绍

(1) 什么是JMS?

JMS(Java Messaging Service)是 Java 平台上有关面向消息中间件的技术规范,它便于消息系统中的 Java 应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口,简化企业应用的开发。

(2) JMS中有哪些消息模型?

2.1点对点模型(Point To Point)

生产者发送一条消息到 queue,只有一个消费者能收到。

e444d3007c9761aa985f6853d9420496.png

2.2发布订阅模型(Publish/Subscribe)

发布者发送到 topic 的消息,只有订阅了 topic 的订阅者才会收到消息。

e444d3007c9761aa985f6853d9420496.png

4. 安装ActiveMQ

(1) 如何安装ActiveMQ?

1.1版本说明

ActiveMQ5.10.x 以上版本必须使用 JDK1.8 才能正常使用。ActiveMQ5.9.x 及以下版本使用 JDK1.7 即可正常使用。

2 上传至 Linux 服务器

3 解压安装文件

tar -zxf apache-activemq-5.9.0-bin.tar.gz

4 检查权限

ls -al apache-activemq-5.9.0/bin

如果权限不足,则无法执行,需要修改文件权限:

chmod 755 activemq

5 复制应用至本地目录

cp apache-activemq-5.9.0 /usr/local/activemq –r

6 启动 ActiveMQ

/usr/local/activemq/bin/

./activemq start

7 测试 ActiveMQ

7.1检查进程

ps aux | grep activemq

见到下述内容即代表启动成功

e444d3007c9761aa985f6853d9420496.png

7.2管理界面

使用浏览器访问 ActiveMQ 管理应用, 地址如下:

注:需要关闭防火墙 service iptables stop

http://192.168.186.134:8161/admin

e444d3007c9761aa985f6853d9420496.png

用户名: admin

密码: admin

ActiveMQ 使用的是 jetty 提供 HTTP 服务.启动稍慢,建议短暂等待再访问测试

见到如下界面代表服务启动成功

e444d3007c9761aa985f6853d9420496.png

7.3修改访问管理页面的端口

cd /usr/local/activemq/conf

vim jetty.xml

修改 ActiveMQ 配置文件:

/usr/local/activemq/conf/jetty.xml配置文件修改完毕,保存并重新启动 ActiveMQ 服务。

e444d3007c9761aa985f6853d9420496.png

7.4修改用户名和密码

修改 conf/users.properties 配置文件.内容为: 用户名=密保存并重启 ActiveMQ 服务即可.

cd /usr/local/activemq/conf

vim users.properties

e444d3007c9761aa985f6853d9420496.png

8 重启 ActiveMQ

/usr/local/activemq/bin/activemq restart

9 关闭 ActiveMQ

/usr/local/activemq/bin/activemq stop

10 配置文件 activemq.xml

配置文件中,配置的是 ActiveMQ 的核心配置信息. 是提供服务时使用的配置. 可以修启动的访问端口. 即 java 编程中访问 ActiveMQ 的访问端口.

默认端口为 61616.

使用协议是: tcp 协议.

修改端口后, 保存并重启 ActiveMQ 服务即可.

cd /usr/local/activemq/conf

vim activemq.xml

e444d3007c9761aa985f6853d9420496.png

5. ActiveMQ目录介绍

(1) ActiveMQ有哪些目录?没给目录的作用是什么?

* bin 存放的是脚本文件

* conf 存放的是基本配置文件

* data 存放的是日志文件

* docs 存放的是说明文档

* examples 存放的是简单的实例

* lib 存放的是 activemq 所需 jar 包

* webapps 用于存放项目的目录

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第172次(ActiveMQ)

学习主题:ActiveMQ

学习目标:

1 掌握ActiveMQ中的术语与API

2 掌握使用MQ处理文本消息,对象消息

3 掌握使用ActiveMQ实现队列服务监听处理消息

4 掌握Topic模型

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

6. ActiveMQ中的术语

(1) Destination是什么含义?

目的地,JMS Provider(消息中间件)负责维护,用于对 Message 进行管理的对象。MessageProducer 需要指定 Destination 才能发送消息,MessageReceiver 需要指定 Destination才能接收消息。

(2) Producer是什么含义?

消息生成者,负责发送 Message 到目的地。

(3) Consumer | Receiver是什么含义?

消息消费者,负责从目的地中消费【处理|监听|订阅】Message。

(4) Message是什么含义?

消息,消息封装一次通信的内容。

7. ActiveMQ中的常用API

(1) ConnectionFactory的作用是什么?

链接工厂, 用于创建链接的工厂类型.

(2) Connection的作用是什么?

链接. 用于建立访问 ActiveMQ 连接的类型, 由链接工厂创建.

(3) Session的作用是什么?

会话, 一次持久有效有状态的访问. 由链接创建.

(4) Destination & Queue的作用是什么?

目的地, 用于描述本次访问 ActiveMQ 的消息访问目的地. 即 ActiveMQ 服务中的具体队列. 由会话创建.

interface Queue extends Destination

(5) MessageProducer的作用是什么?

消息生成者, 在一次有效会话中, 用于发送消息给 ActiveMQ 服务的工具. 由会话创建.

(6) MessageProducer的作用是什么?

消息消费者【消息订阅者,消息处理者】, 在一次有效会话中, 用于从 ActiveMQ 服务中获取消息的工具. 由会话创建.

(7) Message的作用是什么?

消息, 通过消息生成者向 ActiveMQ 服务发送消息时使用的数据载体对象或消息消费者从 ActiveMQ 服务中获取消息时使用的数据载体对象. 是所有消息【文本消息,对象消息等】具体类型的顶级接口. 可以通过会话创建或通过会话从 ActiveMQ 服务中获取.

8. ActiveMQ处理文本消息-创建消息生产者

(1) 如何创建消息生产者?

  public class HelloWorldProducer {
    /**
     * 编写消息的生产者
     */
public void sendHelloWorldActiveMQ(String msgTest){
        //定义连接工厂
ConnectionFactory connectionFactory=null;
        //定义连接对象
Connection connection=null;
        //定义会话
Session session=null;
        //目的地
Destination destination=null;
        //定义消息的发送者
MessageProducer producer=null;
        //定义消息
Message message=null;
  
  
        try{
            /**
             * userName:访问ActiveMQ服务的用户名。用户密码。默认的为admin。用户名可以通过jetty-ream.properties文件进行修改
             * password:访问ActiveMQ服务的用户名。用户密码。默认的为admin。用户名可以通过jetty-ream.properties文件进行修改
             * brokerURL:访问ActiveMQ服务的路径地址。路径结构为:协议名://主机地址:端口号   消息通信端口61616
             */
            //创建连接工厂
connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.186.134:61616");
  
            //创建连接对象
connection = connectionFactory.createConnection();
  
            //启动连接
connection.start();
  
            /**
             * transacted:是否使用事务 可选值为:true|false
             *            true:使用事务 当设置次变量值。Session.SESSION_TRANSACTED
             *            false:不适用事务,设置次变量 则acknowledgeMode参数必须设置
             * acknowledgeMode:
             * Session.AUTO_ACKNOWLEDGE:自动消息确认机制
             * Session.CLIENT_ACKNOWLEDGE:客户端确认机制
             * Session.DUPS_OK_ACKNOWLEDGE:有副本的客户端确认消息机制
             */
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  
            //创建消息发送的目的地,目的地名称即队列的名称。消息的消费者需要通过此名称访问对应的队列
destination = session.createQueue("helloworld-destination");
  
            //创建消息的生产者
producer = session.createProducer(destination);
  
            //创建消息对象
message = session.createTextMessage(msgTest);
  
            //发送消息
producer.send(message);
  
        }catch(Exception e){
            e.printStackTrace();
        }finally{
  
            //回收消息发送者资源
if(producer != null){
                try {
                    producer.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
e.printStackTrace();
                }
            }
            if(session != null){
                try {
                    session.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
e.printStackTrace();
                }
            }
            if(connection != null){
                try {
                    connection.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
e.printStackTrace();
                }
            }
        }
    }
}

9. ActiveMQ处理文本消息-创建消息消费者

(1) 如何创建消息消费者?


public class HelloWorldConsumer {/*** 消费消息*/
public void readHelloWorldActiveMQ() {// 定义链接工厂
ConnectionFactory connectionFactory = null;// 定义链接对象
Connection connection = null;// 定义会话
Session session = null;// 目的地
Destination destination = null;// 定义消息的消费者
MessageConsumer consumer = null;// 定义消息
Message message = null;
try {/*** userName:访问ActiveMQ服务的用户名。用户密码。默认的为admin。用户名可以通过jetty-ream.* properties文件进行修改* password:访问ActiveMQ服务的用户名。用户密码。默认的为admin。用户名可以通过jetty-ream.* properties文件进行修改 brokerURL:访问ActiveMQ服务的路径地址。路径结构为:协议名://主机地址:端口号*/
connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.186.134:61616");// 创建连接对象
connection = connectionFactory.createConnection();// 启动连接
connection.start();/*** transacted:是否使用事务 可选值为:true|false true:使用事务* 当设置次变量值。Session.SESSION_TRANSACTED false:不适用事务,设置次变量* 则acknowledgeMode参数必须设置 acknowledgeMode:* Session.AUTO_ACKNOWLEDGE:自动消息确认机制* Session.CLIENT_ACKNOWLEDGE:客户端确认机制* Session.DUPS_OK_ACKNOWLEDGE:有副本的客户端确认消息机制*/
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 创建目的地,目的地名称即队列的名称。消息的消费者需要通过此名称访问对应的队列
destination = session.createQueue("helloworld-destination");// 创建消息的消费者
consumer = session.createConsumer(destination);// 创建消息对象
message = consumer.receive();//处理消息
String msg = ((TextMessage)message).getText();
System.out.println("从ActiveMQ服务中获取的文本信息 "+msg);
} catch (Exception e) {
e.printStackTrace();
} finally {// 回收消息发送者资源
if (consumer != null) {
try {
consumer.close();
} catch (JMSException e) {// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (session != null) {
try {
session.close();
} catch (JMSException e) {// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

10. ActiveMQ处理对象消息

(1) 如何处理消息对象?

2.2.1 定义消息对象(Users implements Serializable)

2.2.2 创建生产者(HelloWorldProducer2)

2.2.3 定义消息消费者(HelloWorldConsumer2)

代码略..

11. ActiveMQ实现队列服务监听处理消息

(1) ActiveMQ实现队列服务监听处理消息

队列服务监听使用的观察者设计模式

3.1创建消息生产者(HelloWorldProducer3)

3.2消息消费者(HelloWorldConsumer3)

代码略..

12. Topic模型的使用

(1) 什么是Topic模型?

4.1Publish/Subscribe 处理模式(Topic)

消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。

和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。当生产者发布消息,不管是否有消费者。都不会保存消息一定要先有消息的消费者,后有消息的生产者。

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值