2018-08-24
MQ基础与运用
[TOC]
一.MQ原理
待整理
二.ActiveMQ部分
1.概念
消息队列:即时消息通信和延时消息通信
MQ 是一个消息中间件,常见的消息中间件有 ActiveMQ | RabbitMQ | kafka
ActiveMQ底层基于java的JMS实现,在没有JMS之前的系统存在很多缺陷:
- 前后端同步问题,如果后台没有响应,则前段会一直阻塞等待
- 前后端生命周期耦合性太强,一方崩了则另一方也会崩
- 点对点通信,前段一次只能发送给某一个单独的服务对象,无法群发
JMS: (Java Message Service ) 通过消息中间件(MOM:Message Oriented Middleware )
将消息发送给单独的消息服务器中,消息服务器会将消息存放在若干的队列/主题中,在合适的时候将消息发送给接收者.发送和接收是异步的,无需阻塞等待 在pub/sub的模式下,可以将消息发送给多个接收者
JMS类中定义了java访问中间件的接口,除此之外都是异常定义
- Provider/MessageProvider:生产者
- Consumer/MessageConsumer:消费者
- PTP:Point To Point,点对点通信消息模型
- Pub/Sub:Publish/Subscribe,发布订阅消息模型
- Queue:队列,目标类型之一,和PTP结合
- Topic:主题,目标类型之一,和Pub/Sub结合
- ConnectionFactory:连接工厂,JMS用它创建连接
- Connnection:JMS Client到JMS Provider的连接
- Destination:消息目的地,由Session创建
- Session:会话,由Connection创建,实质上就是发送、接受消息的一个线程,因此生产者、消费者都是Session创建的
2.应用
| 异步处理 | 应用解耦 | 流量削锋 | 消息通讯 |
详情参考:https://blog.csdn.net/kingcat666/article/details/78660535
3.消息模式
- P2P模式(点对点) Queue
- Pub/Sub模式(发布订阅) Topic
- Push模式(推拉模式,消息更新C/S中)
Topic根据业务需求,也可以持久化
客户端启动时设置一个ClientID作为编号在服务器注册
可以将消息一致保存在服务器(可以持久化)
环境搭建文件中存放该操作方法
4.五种不同的消息正文格式
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
- StreamMessage – Java原始值的数据流
- MapMessage–一套名称-值对
- TextMessage–一个字符串对象(常用)
- ObjectMessage–一个序列化的 Java对象
- BytesMessage–一个字节的数据流
5.java中与Solr结合
搭建..(省略)
注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。
(5.12.0中许多包和spring相同,而且少方法,坑)
建议使用5.11.2
进入管理后台:
- http://www.fzs.com:8161/admin/
- 用户名:admin
- 密码:admin
5-1.JMS规范下使用套路 基础原理
导包
1 | <dependency> |
提供方
1 | //1.创建工厂对象ConnectionFactory,需要指定IP和端口 |
接收方
1 | //1.创建工厂对象ConnectionFactory连接MQ服务器 |