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