1、JMS介绍和使用场景及基础编程模型html
简介:讲解什么是小写队列,JMS的基础知识和使用场景html5
一、什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口java
二、JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它相似于JDBC(Java Database Connectivity)。这里,JDBC 是能够用来访问许多不一样关系数据库的 APIreact
三、使用场景:nginx
1)跨平台git
2)多语言github
3)多项目web
4)解耦ajax
5)分布式事务redis
6)流量控制
7)最终一致性
8)RPC调用
上下游对接,数据源变更->通知下属
四、概念
JMS提供者:Apache ActiveMQ、RabbitMQ、Kafka、Notify、MetaQ、RocketMQ
JMS生产者(Message Producer)
JMS消费者(Message Consumer)
JMS消息
JMS队列
JMS主题
JMS消息一般有两种类型:点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)
五、编程模型
MQ中须要用的一些类
ConnectionFactory :链接工厂,JMS 用它建立链接
Connection :JMS 客户端到JMS Provider 的链接
Session: 一个发送或接收消息的线程
Destination :消息的目的地;消息发送给谁.
MessageConsumer / MessageProducer: 消息接收者,消费者
2、ActiveMQ5.x消息队列基础介绍和安装
简介:介绍ActiveMQ5.x消息队列基础特性和本地快速安装
特色:
1)支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各类跨语言客户端和协议
2)支持许多高级功能,如消息组,虚拟目标,通配符和复合目标
3) 彻底支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息
4) Spring支持,ActiveMQ能够轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
5) 支持在流行的J2EE服务器(如TomEE,Geronimo,JBoss,GlassFish和WebLogic)中进行测试
6) 使用JDBC和高性能日志支持很是快速的持久化
...
一、下载地址:http://activemq.apache.org/activemq-5153-release.html
二、快速开始:http://activemq.apache.org/getting-started.html
三、若是咱们是32位的机器,就双击win32目录下的activemq.bat,若是是64位机器,则双击win64目录下的activemq.bat
四、bin目录里面启动 选择对应的系统版本和位数,activeMQ start 启动
五、启动后访问路径http://127.0.0.1:8161/
六、用户名和密码默认都是admin
七、官方案例集合
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples
面板:
Name:队列名称。
Number Of Pending Messages:等待消费的消息个数。
Number Of Consumers:当前链接的消费者数目
Messages Enqueued:进入队列的消息总个数,包括出队列的和待消费的,这个数量只增不减。
Messages Dequeued:已经消费的消息数量。
3、SpringBoot2整合ActiveMQ实战之点对点消息
简介:SpringBoot2.x整合ActiveMQ实战之点对点消息
一、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-activemq
二、加入依赖
<!-- 整合消息队列ActiveMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- 若是配置线程池则加入 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
三、application.properties配置文件配置
#整合jms测试,安装在别的机器,防火墙和端口号记得开放
spring.activemq.broker-url=tcp://127.0.0.1:61616
#集群配置
#spring.activemq.broker-url=failover:(tcp://localhost:61616,tcp://localhost:61617)
spring.activemq.user=admin
spring.activemq.password=admin
#下列配置要增长依赖
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=100
四、springboot启动类 @EnableJms,开启支持jms
五、模拟请求
localhost:8080/api/v1/order?msg=12312321321312
六、消费者:实时监听对应的队列
@JmsListener(destination = "order.queue")
4、SpringBoot2整合ActiveMQ实战之发布订阅模式
简介:SpringBoot整合ActiveMQ实战之发布订阅模式(pub/sub),及同时支持点对点和发布订阅模型
一、须要加入配置文件,支持发布订阅模型,默认只支持点对点
#default point to point
spring.jms.pub-sub-domain=true
注意点:
一、默认消费者并不会消费订阅发布类型的消息,这是因为springboot默认采用的是p2p模式进行消息的监听
修改配置:spring.jms.pub-sub-domain=true
二、@JmsListener若是不指定独立的containerFactory的话是只能消费queue消息
修改订阅者container:containerFactory="jmsListenerContainerTopic"
//须要给topic定义独立的JmsListenerContainer
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory);
return bean;
}
在配置文件里面,注释掉 #spring.jms.pub-sub-domain=true
5、RocketMQ4.x消息队列介绍
简介:阿里开源消息队列 RocketMQ4.x介绍和新概念讲解
一、Apache RocketMQ做为阿里开源的一款高性能、高吞吐量的分布式消息中间件
二、特色
1)在高压下1毫秒内响应延迟超过99.6%。
2)适合金融类业务,高可用性跟踪和审计功能。
3)支持发布订阅模型,和点对点
4)支持拉pull和推push两种消息模式
5)单一队列百万消息
6)支持单master节点,多master节点,多master多slave节点
...
三、概念
Producer:消息生产者
Producer Group:消息生产者组,发送同类消息的一个消息生产组
Consumer:消费者
Consumer Group:消费同个消息的多个实例
Tag:标签,子主题(二级分类),用于区分同一个主题下的不一样业务的消息
Topic:主题
Message:消息
Broker:MQ程序,接收生产的消息,提供给消费者消费的程序
Name Server:给生产和消费者提供路由信息,提供轻量级的服务发现和路由
三、官网地址:http://rocketmq.apache.org/
学习资源:
1)http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/
2)https://www.jianshu.com/p/453c6e7ff81c
6、RocketMQ4.x本地快速部署
简介:RocketMQ4.x本地快速部署
一、安装前提条件(推荐)
64bit OS, Linux/Unix/Mac
64bit JDK 1.8+;
二、快速开始 http://rocketmq.apache.org/docs/quick-start/
下载安装包:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
路径:/Users/jack/Desktop/person/springboot/资料/第13章/第5课/rocketmq-all-4.2.0-bin-release/bin
三、解压压缩包
1)进入bin目录,启动namesrv
nohup sh mqnamesrv &
2) 查看日志 tail -f nohup.out
结尾:The Name Server boot success. serializeType=JSON 表示启动成功
三、启动broker
nohup sh mqbroker -n 127.0.0.1:9876 &
4)、关闭nameserver broker执行的命令
sh mqshutdown namesrv
sh mqshutdown broker
7、RoekerMQ4.x可视化控制台讲解
简介:RoekerMQ4.x可视化控制台讲解
一、下载 https://github.com/apache/rocketmq-externals
二、编译打包 mvn clean package -Dmaven.test.skip=true
三、target目录 经过java -jar的方式运行
四、没法链接获取broker信息
1)修改配置文件,名称路由地址为 namesrvAddr,例如我本机为
2)src/main/resources/application.properties
rocketmq.config.namesrvAddr=192.168.0.101:9876
五、默认端口 localhost:8080
六、注意:
在阿里云,腾讯云或者虚拟机,记得检查端口号和防火墙是否启动
8、Springboot2整合RocketMQ4.x实战上集
简介:Springboot2.x整合RocketMQ4.x实战,加入相关依赖,开发生产者代码
启动nameser和broker
一、加入相关依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>${rocketmq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-common</artifactId>
<version>${rocketmq.version}</version>
</dependency>
二、application.properties加入配置文件
# 消费者的组名
apache.rocketmq.consumer.PushConsumer=orderConsumer
# 生产者的组名
apache.rocketmq.producer.producerGroup=Producer
# NameServer地址
apache.rocketmq.namesrvAddr=127.0.0.1:9876
三、开发MsgProducer
/**
* 生产者的组名
*/
@Value("${apache.rocketmq.producer.producerGroup}")
private String producerGroup;
/**
* NameServer 地址
*/
@Value("${apache.rocketmq.namesrvAddr}")
private String namesrvAddr;
private DefaultMQProducer producer ;
public DefaultMQProducer getProducer(){
return this.producer;
}
@PostConstruct
public void defaultMQProducer() {
//生产者的组名
producer = new DefaultMQProducer(producerGroup);
//指定NameServer地址,多个地址以 ; 隔开
//如 producer.setNamesrvAddr("192.168.100.141:9876;192.168.100.142:9876;192.168.100.149:9876");
producer.setNamesrvAddr(namesrvAddr);
producer.setVipChannelEnabled(false);
try {
/**
* Producer对象在使用以前必需要调用start初始化,只能初始化一次
*/
producer.start();
} catch (Exception e) {
e.printStackTrace();
}
// producer.shutdown(); 通常在应用上下文,关闭的时候进行关闭,用上下文监听器
}
9、Springboot2整合RocketMQ4.x实战下集
简介:Springboot2.x整合RocketMQ4.x实战,开发消费者代码,常见问题处理
一、建立消费者
问题:
一、Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.42.1:10911> failed
二、com.alibaba.rocketmq.client.exception.MQClientException: Send [1] times, still failed, cost [1647]ms, Topic: TopicTest1, BrokersSent: [broker-a, null, null]
三、org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [497]ms, Topic: TopicTest, BrokersSent: [chenyaowudeMacBook-Air.local, chenyaowudeMacBook-Air.local, chenyaowudeMacBook-Air.local]
解决:多网卡问题处理
一、设置producer: producer.setVipChannelEnabled(false);
二、编辑ROCKETMQ 配置文件:broker.conf(下列ip为本身的ip)
namesrvAddr = 192.168.0.101:9876
brokerIP1 = 192.168.0.101
四、DESC: service not available now, maybe disk full, CL:
解决:修改启动脚本runbroker.sh,在里面增长一句话便可:
JAVA_OPT="${JAVA_OPT} -Drocketmq.broker.diskSpaceWarningLevelRatio=0.98"
(磁盘保护的百分比设置成98%,只有磁盘空间使用率达到98%时才拒绝接收producer消息)
常见问题处理:
https://blog.csdn.net/sqzhao/article/details/54834761
https://blog.csdn.net/mayifan0/article/details/67633729
https://blog.csdn.net/a906423355/article/details/78192828
10、SpringBoot多环境配置介绍和项目实战(核心知识)
简介:SpringBoot介绍多环境配置和使用场景
一、不一样环境使用不一样配置
例如数据库配置,在开发的时候,咱们通常用开发数据库,而在生产环境的时候,咱们是用正式的数据
二、配置文件存放路径
classpath根目录的“/config”包下
classpath的根目录下
三、spring boot容许经过命名约定按照必定的格式(application-{profile}.properties)来定义多个配置文件
11、SprinBoot2.x响应式编程简介
简介:讲解什么是reactive响应式编程和使用的好处
一、基础理解:
依赖于事件,事件驱动(Event-driven)
一系列事件称为“流”
异步
非阻塞
观察者模式
网上的一个例子:
int b= 2;
int c=3
int a = b+c //命令式编程后续b和c变化,都不影响a
b=5;
int b= 2;
int c= 3
int a = b+c //响应式编程中,a的变化,会和b、c的变化而变化(事件驱动)
b=5;
二、官网:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-webflux
SpingBoot2底层是用spring5,开始支持响应式编程,Spring又是基于Reactor试下响应式。
学习资料
一、reactive-streams学习资料:http://www.reactive-streams.org/
二、web-flux相关资料:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux
12、SpringBoot2.x响应式编程webflux介绍
简介:讲解SpringBoot2.x响应式编程介绍 Mono、Flux对象和优缺点
一、Spring WebFlux是Spring Framework 5.0中引入的新的反应式Web框架
与Spring MVC不一样,它不须要Servlet API,彻底异步和非阻塞,并 经过Reactor项目实现Reactive Streams规范。
RxJava
二、Flux和Mono User List<User>
1)简单业务而言:和其余普通对象差异不大,复杂请求业务,就能够提高性能
2)通俗理解:
Mono 表示的是包含 0 或者 1 个元素的异步序列
mono->单一对象 User redis->用户ID-》惟一的用户Mono<User>
Flux 表示的是包含 0 到 N 个元素的异步序列
flux->数组列表对象 List<User> redis->男性用户->Flux<User>
Flux 和 Mono 之间能够进行转换
三、Spring WebFlux有两种风格:基于功能和基于注解的。基于注解很是接近Spring MVC模型,如如下示例所示:
第一种:
@RestController
@RequestMapping(“/ users”)
public class MyRestController {
@GetMapping(“/ {user}”)
public Mono <User> getUser( @PathVariable Long user){
// ...
}
@GetMapping(“/ {user} / customers”)
public Flux <Customer> getUserCustomers( @PathVariable Long user){
// ...
}
@DeleteMapping(“/ {user}”)
public Mono <User> deleteUser( @PathVariable Long user){
// ...
}
}
第二种: 路由配置与请求的实际处理分开
@Configuration
public class RoutingConfiguration {
@Bean
public RouterFunction <ServerResponse> monoRouterFunction(UserHandler userHandler){
return route(GET( “/ {user}”).and(accept(APPLICATION_JSON)),userHandler :: getUser)
.andRoute(GET(“/ {user} / customers”).and(accept(APPLICATION_JSON)),userHandler :: getUserCustomers)
.andRoute(DELETE(“/ {user}”).and(accept(APPLICATION_JSON)),userHandler :: deleteUser);
}
}
@Component
public class UserHandler {
公共 Mono <ServerResponse> getUser(ServerRequest请求){
// ...
}
public Mono <ServerResponse> getUserCustomers(ServerRequest request){
// ...
}
公共 Mono <ServerResponse> deleteUser(ServerRequest请求){
// ...
}
}
四、Spring WebFlux应用程序不严格依赖于Servlet API,所以它们不能做为war文件部署,也不能使用src/main/webapp目录
五、能够整合多个模板引擎
除了REST Web服务外,您还可使用Spring WebFlux提供动态HTML内容。Spring WebFlux支持各类模板技术,包括Thymeleaf,FreeMarker
十3、SpringBoot2.x webflux实战
简介:webflux响应式编程实战
一、WebFlux中,请求和响应再也不是WebMVC中的ServletRequest和ServletResponse,而是ServerRequest和ServerResponse
二、加入依赖,若是同时存在spring-boot-starter-web,则会优先用spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
测试
localhost:8080/api/v1/user/test
三、启动方式默认是Netty,8080端口
四、参考:https://spring.io/blog/2016/04/19/understanding-reactive-types、
十4、服务端推送经常使用技术介绍
简介:服务端经常使用推送技术介绍,如websocket,sse轮询等
一、客户端轮询:ajax定时拉取
二、服务端主动推送:WebSocket
全双工的,本质上是一个额外的tcp链接,创建和关闭时握手使用http协议,其余数据传输不使用http协议
更加复杂一些,适用于须要进行复杂双向数据通信的场景
三、服务端主动推送:SSE (Server Send Event)
html5新标准,用来从服务端实时推送数据到浏览器端,
直接创建在当前http链接上,本质上是保持一个http长链接,轻量协议
简单的服务器数据推送的场景,使用服务器推送事件
学习资料:http://www.w3school.com.cn/html5/html_5_serversentevents.asp
十5、高级篇幅之云服务器介绍和部署生产环境实战
一、阿里云服务器介绍和使用讲解
简介:阿里云服务器介绍和使用讲解
二、阿里云Linux服务器部署JDK8实战
简介:在阿里云服务器上安装JDK8和配置环境变量
lnux下使用wget下载jdk8:
进到目录/usr/local/software
配置环境变量
vim /etc/profile
加入
export JAVA_HOME=/usr/local/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
使用 source /etc/profile 让配置马上生效
三、阿里云服务器SpringBoot2.x生产环境部署实战
简介:讲解SpringBoot生产环境部署和常见注意事项
一、去除相关生产环境没用的jar
好比热部署dev-tool
二、本地maven打包成jar包
mvn clean package -Dmaven.test.skip=true 跳过测试
三、服务器安装jdk,上传Jar包
上传工具:
windows:
winscp
securtyCRT
mac:
filezilla
ssh root@120.79.160.143
访问路径 http://120.79.160.143:8080/api/v1/user/find
java -jar xxxx.jar
守护进程、系统服务、shell脚本
打包指定配置文件
一、使用maven的profiles
二、使用springboot的profile=active
访问不了
一、阿里云防火墙是否开启,能够选择关闭,关闭是不安全的,能够选择开放端口
二、阿里云的安全访问组,开启对应的端口,若是应用是以80端口启动,则默承认以访问
四、成熟的互联网公司应该有的架构
本地提交生产代码->gitlab仓库->Jenkins自动化构建->运维或者开发人员发布
十6、SpringBoot2.x监控Actuator实战上集
简介:讲解SpringBoot使用actuator监控配置和使用
可用性:100%,99.9%
一、介绍什么是actuator
官方介绍:
Spring Boot包含许多附加功能,可帮助您在将应用程序投入生产时监视和管理应用程序。 能够选择使用HTTP端点或JMX来管理和监控您的应用程序,自动应用于审计,健康和指标收集;
一句话:springboot提供用于监控和管理生产环境的模块
官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#production-ready
二、加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
三、加入上述依赖后,访问几个url
/actuator/health
/actuator/info
/actuator
十7、SpringBoot2监控Actuator下集及生产环境建议
简介:SpringBoot2.x监控Actuator实战下集及生产环境建议,SpringBoot新旧版本区别
注意点: 网上的资料大多数没有讲到访问的前缀
端点基础路径由 / 调整到 /actuator
如:/info调整为/actuator/info
/actuator/xxx
一、只能访问几个url
1)须要在配置文件中加入下列配置
management.endpoints.web.exposure.include=*
2)官网说明:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-security-actuator
缘由:
出于安全考虑,除/ health和/ info以外的全部执行器默认都是禁用的。 management.endpoints.web.exposure.include属性可用于启用执行器
二、建议
在设置management.endpoints.web.exposure.include以前,请确保暴露的执行器不包含敏感信息和/
或经过将其放置在防火墙进行控制,不对外进行使用
禁用的端点将从应用程序上下文中彻底删除。若是您只想更改端点所暴露的技术,请改用 include和exclude属性 。
例子:
开启所有:management.endpoints.web.exposure.include=*
开启某个:management.endpoints.web.exposure.include=metrics
关闭某个:management.endpoints.web.exposure.exclude=metrics
或者用springadmin进行管理
相关资料:https://www.cnblogs.com/ityouknow/p/8440455.html
或者用本身编写脚本监控
CPU、内存、磁盘、nginx的http响应状态码200,404,5xx
三、介绍经常使用的几个
/health 查看应用健康指标
/actuator/metrics 查看应用基本指标列表
/actuator/metrics/{name} 经过上述列表,查看具体 查看具体指标
/actuator/env 显示来自Spring的 ConfigurableEnvironment的属性
更多学习资料可参考:https://xdclass.net/html/course_catalogue.html?video_id=4