零基礎快速入門SpringBoot2.0教程 (四)

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

https://ke.qq.com/course/299498

相關文章
相關標籤/搜索