# 從淺入深 學習 SpringCloud 微服務架構(十六)

從淺入深 學習 SpringCloud 微服務架構(十六)

一、SpringCloudStream:自定義消息通道

1、在子工程 stream_product (子模塊)中,創建 自定義的消息通道類 MyProcessor.java

/***   spring_cloud_demo\stream_product\src\main\java\djh\it\stream\channel\MyProcessor.java**   2024-5-11 創建 自定義的消息通道類 MyProcessor.java*/package djh.it.stream.channel;import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;public interface MyProcessor {//消息生產者的配置String MYOUTPUT = "myoutput";@Output("myoutput")MessageChannel myoutput();//消息消費者的配置String MYINPUT = "myinput";@Input("myinput")SubscribableChannel myinput();
}

2、在子工程 stream_product (子模塊)中,修改 消息發送的工具類 MessageSender.java 使用自定義消息通道。

/***  spring_cloud_demo\stream_product\src\main\java\djh\it\stream\producer\MessageSender.java**  2024-5-10  抽取一個消息發送的工具類 MessageSender.java*/package djh.it.stream.producer;import djh.it.stream.channel.MyProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cloud.stream.annotation.EnableBinding;
//import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;@Component
//@EnableBinding(Source.class)
@EnableBinding(MyProcessor.class)
public class MessageSender {
//    @Autowired
//    private MessageChannel output;
//
//    //發送消息
//    public void send(Object obj){
//        output.send(MessageBuilder.withPayload((obj)).build());
//    }@Autowired@Qualifier(value = "myoutput")private MessageChannel myoutput;//發送消息public void send(Object obj){myoutput.send(MessageBuilder.withPayload((obj)).build());}
}

3、在子工程 stream_product (子模塊)中,修改 application.yml 配置文件, 添加自定義消息配置。

##  spring_cloud_demo\stream_product\src\main\resources\application.ymlserver:port: 7001  #服務端口
spring:application:nmae: stream_product  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:output:  #管道交互destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myoutput:   # 自定義消息通道destination: djh-custom-outputbinders:  #配置綁定器defaultRabbit:type: rabbit

4、在子工程 stream_consumer (子模塊)中,創建 自定義的消息通道類 MyProcessor.java

/***   spring_cloud_demo\stream_consumer\src\main\java\djh\it\stream\channel\MyProcessor.java**   2024-5-11 創建 自定義的消息通道類 MyProcessor.java*/package djh.it.stream.channel;import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;public interface MyProcessor {//消息生產者的配置String MYOUTPUT = "myoutput";@Output("myoutput")MessageChannel myoutput();//消息消費者的配置String MYINPUT = "myinput";@Input("myinput")SubscribableChannel myinput();
}

5、在子工程 stream_consumer (子模塊)中,修改 獲取消息工具類 MessageListener.java 使用自定義消息通道。

/***   spring_cloud_demo\stream_consumer\src\main\java\djh\it\stream\consumer\MessageListener.java**   2024-5-10 創建一個獲取消息工具類 MessageListener.java*/package djh.it.stream.consumer;import djh.it.stream.channel.MyProcessor;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
//import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.stereotype.Component;@Component
//@EnableBinding(Sink.class)
@EnableBinding(MyProcessor.class)
public class MessageListener {//    //監聽 binding 中的消息
//    @StreamListener(Sink.INPUT)
//    public void input(String message) {
//        System.out.println("獲取到的消息: " + message);
//    }//監聽 binding 中的消息@StreamListener(MyProcessor.MYINPUT)public void input(String message) {System.out.println("獲取到的消息: " + message);}
}

6、在子工程 stream_consumer (子模塊)中,修改 application.yml 配置文件, 添加自定義消息配置。

##  spring_cloud_demo\stream_consumer\src\main\resources\application.ymlserver:port: 7002  #服務端口
spring:application:nmae: stream_consumer  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input:  #管道交互,內置的獲取消息的通道,從 djh-default 中獲取消息。destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myinput:   #自定義消息通道destination: djh-custom-outputbinders:  #配置綁定器defaultRabbit:type: rabbit

7、在子工程 stream_product (子模塊)中,運行 啟動類 ProducerApplication.java 進行測試

/***   spring_cloud_demo\stream_product\src\main\java\djh\it\stream\ProducerApplication.java**   2024-5-9 SpringCloudStream 入門案例:啟動類 ProducerApplication.java*      1)引入依賴。*      2)配置 application.yml 配置文件。*      3)發送消息的話,定義一個通道接口,通過接口中內置的 messagechannel,(sprngcloudtream 中內置接口 Source)*      4)@EnableBinding 注解 :綁定對應通道。*      5)發送消息的話,通過 MessageChannel 發送消息,如果需要 MessageChannel --> 通過綁定內置接口獲取。*/package djh.it.stream;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ProducerApplication {public static void main(String[] args) {SpringApplication.run(ProducerApplication.class);}
}

8、在子工程 stream_consumer (子模塊)中,運行 啟動類 ConsumerApplication.java 進行測試。

/***    spring_cloud_demo\stream_consumer\src\main\java\djh\it\stream\ConsumerApplication.java**   2024-5-9 SpringCloudStream 入門案例:啟動類 ConsumerApplication.java*      1)引入依賴。*      2)配置 application.yml 配置文件。*      3)定義一個通道接口,通過內置獲取消息的接口:Sink*      4)綁定對應通道。*      5)配置一個監聽方法 :當程序從中間件獲取數據之后,執行的業務邏輯方法,需要在監聽方法上配置 @StreamListener 注解。*/package djh.it.stream;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class);}
}

9、在子工程 stream_product (子模塊)中,運行 一個測試類 ProducterTest.java 進行測試。

/***  spring_cloud_demo\stream_product\src\test\java\djh\it\stream\ProducterTest.java**  2024-5-10 創建一個測試類 ProducterTest.java*/package djh.it.stream;import djh.it.stream.producer.MessageSender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class ProducterTest {@Autowiredprivate MessageSender messageSender;@Testpublic void testSend(){messageSender.send("hello 測試 工具類");}
}

10、啟動 rabbitmqctl-server.bat 服務,并運行 測試類 ProducterTest 和 ConsumerApplication 啟動類,在 idea Run Dashboard 控制面板,

同樣會輸出 “獲取到的消息: hello 測試 工具類”

在這里插入圖片描述

二、SpringCloudStream:消息分組

1、SpringCloudStream:消息分組

  • 通常在生產環境,我們的每個服務都不會以單節點的方式運行在生產環境,當同一個服務啟動多個實例的時候,這些實例都會綁定到同一個消息通道的目標主題(Topic)上。默認情況下,當生產者發出一條消息到綁定通道上,這條消息會產生多個副本被每個消費者實例接收和處理,但是有些業務場景之下,我們希望生產者產生的消息只被其中一個實例消費,這個時候我們需要為這些消費者設置消費組來實現這樣的功能。

  • 實現的方式非常簡單,我們只需要在服務消費者端設置 spring.c1oud.stream.bindings.input.group 屬性即可。

2、在子工程 stream_consumer (子模塊),復制一個更名為:在子工程 stream_consumer_2 (子模塊),并把 application.yml 配置文件中的端口號改為:7003

1)子工程 stream_consumer_2 (子模塊)中的 pom.xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring_cloud_demo</artifactId><groupId>djh.it</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>stream_consumer_2</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId></dependency></dependencies>
</project>
<!-- spring_cloud_demo\stream_consumer_2\pom.xml -->

2)子工程 stream_consumer_2 (子模塊)中的 application.yml 文件。

##  spring_cloud_demo\stream_consumer_2\src\main\resources\application.ymlserver:port: 7003  #服務端口
spring:application:nmae: stream_consumer_2  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input:  #管道交互,內置的獲取消息的通道,從 djh-default 中獲取消息。destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myinput:   #自定義消息通道destination: djh-custom-outputbinders:  #配置綁定器defaultRabbit:type: rabbit

3)子工程 stream_consumer_2 (子模塊)中的 自定義的消息通道類 MyProcessor.java

/***   spring_cloud_demo\stream_consumer_2\src\main\java\djh\it\stream\channel\MyProcessor.java**   2024-5-11 創建 自定義的消息通道類 MyProcessor.java*/package djh.it.stream.channel;import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;public interface MyProcessor {//消息生產者的配置String MYOUTPUT = "myoutput";@Output("myoutput")MessageChannel myoutput();//消息消費者的配置String MYINPUT = "myinput";@Input("myinput")SubscribableChannel myinput();
}

4)子工程 stream_consumer_2 (子模塊)中的 獲取消息工具類 MessageListener.java

/***   spring_cloud_demo\stream_consumer_2\src\main\java\djh\it\stream\consumer\MessageListener.java**   2024-5-11 創建一個獲取消息工具類 MessageListener.java*/package djh.it.stream.consumer;import djh.it.stream.channel.MyProcessor;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
//import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.stereotype.Component;@Component
//@EnableBinding(Sink.class)
@EnableBinding(MyProcessor.class)
public class MessageListener {//    //監聽 binding 中的消息
//    @StreamListener(Sink.INPUT)
//    public void input(String message) {
//        System.out.println("獲取到的消息: " + message);
//    }//監聽 binding 中的消息@StreamListener(MyProcessor.MYINPUT)public void input(String message) {System.out.println("獲取到的消息: " + message);}
}

5)子工程 stream_consumer_2 (子模塊)中的 啟動類 ConsumerApplication_2.java

/***   spring_cloud_demo\stream_consumer_2\src\main\java\djh\it\stream\ConsumerApplication_2.java**   2024-5-11 SpringCloudStream 入門案例:啟動類 ConsumerApplication_2.java*      1)引入依賴。*      2)配置 application.yml 配置文件。*      3)定義一個通道接口,通過內置獲取消息的接口:Sink*      4)綁定對應通道。*      5)配置一個監聽方法 :當程序從中間件獲取數據之后,執行的業務邏輯方法,需要在監聽方法上配置 @StreamListener 注解。*/package djh.it.stream;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ConsumerApplication_2 {public static void main(String[] args) {SpringApplication.run(ConsumerApplication_2.class);}
}

3、啟動 rabbitmqctl-server.bat 服務,并運行 測試類 ProducterTest 和 ConsumerApplication 啟動類 和 ConsumerApplication_2 啟動類,

在 idea Run Dashboard 控制面板,兩個消費都啟動類都會輸出 “獲取到的消息: hello 測試 工具類”

在這里插入圖片描述

4、在子工程 stream_consumer (子模塊)的 application.yml 配置文件中,添加 消息分組配置。

##  spring_cloud_demo\stream_consumer\src\main\resources\application.ymlserver:port: 7002  #服務端口
spring:application:nmae: stream_consumer  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input:  #管道交互,內置的獲取消息的通道,從 djh-default 中獲取消息。destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myinput:   #自定義消息通道destination: djh-custom-outputgroup: group1  #消息分組(同一組只能有一個消息者獲取消息)binders:  #配置綁定器defaultRabbit:type: rabbit

5、在子工程 stream_consumer_2 (子模塊)的 application.yml 配置文件中,也添加 消息分組配置。

##  spring_cloud_demo\stream_consumer_2\src\main\resources\application.ymlserver:port: 7003  #服務端口
spring:application:nmae: stream_consumer_2  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input:  #管道交互,內置的獲取消息的通道,從 djh-default 中獲取消息。destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myinput:   #自定義消息通道destination: djh-custom-outputgroup: group1  #消息分組(同一組只能有一個消息者獲取消息)binders:  #配置綁定器defaultRabbit:type: rabbit

6、重新啟動 rabbitmqctl-server.bat 服務,并運行 測試類 ProducterTest 和 ConsumerApplication 啟動類 和 ConsumerApplication_2 啟動類,

在 idea Run Dashboard 控制面板,發現只有一個消費都啟動類都會輸出 “獲取到的消息: hello 測試 工具類”

在這里插入圖片描述

三、SpringCloudStream:消息分區

1、消息分區

有一些場景需要滿足,同一個特征的數據被同一個實例消費,比如同一個id的傳感器監測數據必須被同-個實例統計計算分析,否則可能無法獲取全部的數據。又比如部分異步任務,首次請求啟動task,二次請求取消task,此場景就必須保證兩次請求至同一實例.

2、在子工程 stream_producer (子模塊)的 application.yml 配置文件中,添加 消息分區配置。

##  spring_cloud_demo\stream_product\src\main\resources\application.ymlserver:port: 7001  #服務端口
spring:application:nmae: stream_product  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:output:  #管道交互destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myoutput:   # 自定義消息通道destination: djh-custom-outputproducer:  # 配置分區partition-key-expression: payload  # 分區關鍵字,對象中的 id 或 對象。partition-count: 2  # 分區大小binders:  #配置綁定器defaultRabbit:type: rabbit

3、在子工程 stream_consumer (子模塊)的 application.yml 配置文件中,也添加 消息分區配置。

##  spring_cloud_demo\stream_consumer\src\main\resources\application.ymlserver:port: 7002  #服務端口
spring:application:nmae: stream_consumer  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:instanceCount: 2  # 消費者總數。instanceIndex: 0  # 當前消費者的索引,從 0 開始。bindings:input:  #管道交互,內置的獲取消息的通道,從 djh-default 中獲取消息。destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myinput:   #自定義消息通道destination: djh-custom-outputgroup: group1  #消息分組(同一組只能有一個消息者獲取消息)consumer:partitioned: true  # 開啟分區支持binders:  #配置綁定器defaultRabbit:type: rabbit

3、在子工程 stream_consumer_2 (子模塊)的 application.yml 配置文件中,也添加 消息分區配置。

##  spring_cloud_demo\stream_consumer_2\src\main\resources\application.ymlserver:port: 7003  #服務端口
spring:application:nmae: stream_consumer_2  #指定服務名rabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:instanceCount: 2  # 消費者總數。instanceIndex: 1  # 當前消費者的索引,從 0 開始。bindings:input:  #管道交互,內置的獲取消息的通道,從 djh-default 中獲取消息。destination: djh-default  #指定消息發送的目的地,在 rabbitmq 中,發送到一個 djh-default 的交換機 exchange。myinput:   #自定義消息通道destination: djh-custom-outputgroup: group2  #消息分組(同一組只能有一個消息者獲取消息)consumer:partitioned: true  # 開啟分區支持binders:  #配置綁定器defaultRabbit:type: rabbit

4、修改 子工程 stream_producer (子模塊)的 測試類 ProducterTest 進行測試。

/***  spring_cloud_demo\stream_product\src\test\java\djh\it\stream\ProducterTest.java**  2024-5-10 創建一個測試類 ProducterTest.java*/package djh.it.stream;import djh.it.stream.producer.MessageSender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class ProducterTest {@Autowiredprivate MessageSender messageSender;@Testpublic void testSend(){
//        messageSender.send("hello 測試 工具類");for(int i=0;i<5;i++){messageSender.send("0");}}
}

5、重新啟動 rabbitmqctl-server.bat 服務,并運行 測試類 ProducterTest 和 ConsumerApplication 啟動類 和 ConsumerApplication_2 啟動類,

在 idea Run Dashboard 控制面板,發現只有 ConsumerApplication 一個消費者啟動類都會輸出 “獲取到的消息: 0”

在這里插入圖片描述

上一節關聯鏈接請點擊:
# 從淺入深 學習 SpringCloud 微服務架構(十五)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10582.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaEE概述 + Maven

文章目錄 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 倉庫 坐標2.2 Maven之項目構建2.3 Maven之依賴管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE&#xff1a; Java SE&#xff1a;指Java標準版&#xff0c;適用于各行各業&#xff0c;主要是Java…

【負載均衡式在線OJ項目day5】OJ服務模塊概要

前言 經過四天的努力已經完成了編譯運行這個大模塊&#xff0c;今天將要進入OJ服務模塊設計&#xff0c;該模塊的本質就是建立一個小型網站 一.功能 為用戶提供題目列表頁面為用戶提供網站首頁(用題目列表充當首頁)為用戶提供指定題目的編輯頁面為用戶提供提交代碼判題功能&a…

FFmpeg常用API與示例(二)—— 解封裝與轉封裝

封裝層 封裝格式(container format)可以看作是編碼流(音頻流、視頻流等)數據的一層外殼&#xff0c;將編碼后的數據存儲于此封裝格式的文件之內。 封裝又稱容器&#xff0c;容器的稱法更為形象&#xff0c;所謂容器&#xff0c;就是存放內容的器具&#xff0c;飲料是內容&…

【QT學習】補充:qt使用已經存在的類

1.右鍵項目--》添加現有文件 注意&#xff1a;不是添加新文件&#xff01;&#xff01;&#xff01; 2.添加配置

掌握Android Fragment開發之魂:Fragment的深度解析(上)

Fragment是Android開發中用于構建動態和靈活界面的基石。它不僅提升了應用的模塊化程度&#xff0c;還增強了用戶界面的動態性和交互性&#xff0c;允許開發者將應用界面劃分為多個獨立、可重用的部分&#xff0c;每個部分都可以獨立于其他部分進行操作。本文將從以下幾個方面深…

信息系統項目管理師0102:可行性研究的內容(7項目立項管理—7.2項目可行性研究—7.2.1可行性研究的內容)

點擊查看專欄目錄 文章目錄 7.2項目可行性研究7.2.1可行性研究的內容1.技術可行性分析2.經濟可行性分析3.社會效益可行性分析4.運行環境可行性分析5.其他方面的可行性分析記憶要點總結7.2項目可行性研究 可行性研究是在項目建議書被批準后,從技術、經濟、社會和人員等方面的條…

OpenWrt項目UCI配置介紹

UCI&#xff08;Unified Configuration Interface&#xff09;是 OpenWrt 項目中使用的一種配置管理系統。它旨在為嵌入式設備提供一個統一且易于理解的配置接口。UCI 主要用于簡化 OpenWrt 系統的各種配置過程&#xff0c;使得管理網絡、服務和其他系統參數變得更加方便。 1 …

String的substring()方法導致的內存泄露問題

JDK 6的實現 String(int offset, int count, char value[]) {this.value value;this.offset offset;this.count count; }public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset beginIndex, endIndex - beginIndex, value);…

r語言數據分析案例-北京市氣溫預測分析與研究

一、選題背景 近年來&#xff0c;人類大量燃燒煤炭、天然氣等含碳燃料導致溫室氣 體過度排放&#xff0c;大量溫室氣體強烈吸收地面輻射中的紅外線&#xff0c;造 成溫室效應不斷累積&#xff0c;使得地球溫度上升&#xff0c;造成全球氣候變暖。 氣象溫度的預測一直以來都是…

[算法][差分][延遲相差][leetcode]2960. 統計已測試設備

題目地址&#xff1a; https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/ 解法一&#xff1a;暴力解法 class Solution {public int countTestedDevices(int[] batteryPercentages) {//特殊條件判斷if(null batteryPercentages || ba…

JavaScript DOM 對元素進行的操作

DOM&#xff08;Document Object Model&#xff09;是一種用于訪問和操作HTML和XML文檔的編程接口。JavaScript通過DOM提供的方法和屬性可以對網頁的元素進行各種操作&#xff0c;比如修改元素的內容、樣式、屬性等。 下面是一些常見的對DOM元素的操作以及相應的代碼示例&…

@RequestMapping path正則規范

RequestMapping 注解是 Spring MVC 中用于映射 HTTP 請求的注解之一。它可以用于處理各種 HTTP 請求&#xff0c;包括 GET、POST、PUT、DELETE 等&#xff0c;并且可以指定請求的路徑、請求方法、請求參數等信息。 在使用 RequestMapping 注解時&#xff0c;可以使用正則表達式…

51單片機入門:串口通信

串行通信的初步認識 通信方式分類 1、按照數據傳送方式&#xff1a; 并行通信&#xff1a;通信時數據的各個位同時傳送&#xff0c;可以實現字節為單位的通信。 但是通信線多&#xff0c;占用資源多&#xff0c;成本高。 串行通信&#xff1a;一次只能發送一位&#xff0c…

python把png轉成jpg

在Python中&#xff0c;你可以使用PIL&#xff08;Python Imaging Library&#xff0c;也稱為Pillow&#xff09;庫來讀取PNG圖片并將其轉換為JPG格式。下面是一個簡單的示例代碼&#xff1a; from PIL import Image# 打開PNG圖片 png_image Image.open(input.png)# 保存為JP…

微軟exchange郵箱發送

使用java發送exchange類型的郵件&#xff0c;foxmail中配置如下圖&#xff1a; 需要的maven依賴如下&#xff1a; <dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</ve…

PCIE協議-2-事務層規范-Message Request Rules

2.2.8 消息請求規則 本文檔定義了以下幾組消息&#xff1a; INTx 中斷信號電源管理錯誤信號鎖定事務支持插槽電源限制支持廠商定義消息延遲容忍度報告&#xff08;LTR&#xff09;消息優化緩沖區沖洗/填充&#xff08;OBFF&#xff09;消息設備就緒狀態&#xff08;DRS&#…

【系統架構師】-案例篇(八)數據流圖

數據流&#xff1a;數據流是系統中數據的流動&#xff0c;它可以是輸入、輸出或存儲在系統中的數據。 數據處理過程&#xff1a;數據處理過程是對數據進行處理的單元&#xff0c;可以是一個物理設備或軟件模塊。 數據存儲&#xff1a;數據存儲是系統中存儲數據的單元&#xff0…

焦作定制在線教育系統上線,小學英語教案怎么寫?教案要怎么下筆?

說到小學英語這也是當前&#xff0c;學生們的重點&#xff0c;那作為配套的輔導機構&#xff0c;要怎么寫教案?這也是需要關注的地方&#xff0c;因為教案關系著教學&#xff0c;有了它學生們上課才會更有效率&#xff0c;所以&#xff0c;會寫教案也是上課的第一步。 教案要怎…

小紅書·電商運營課:小紅書開店流程,小紅書電商如何運營(18節視頻課)

課程目錄 第1節課:學習流程以及后續實操流程注意事項 第2節課:小紅書店鋪類型解析以及開店細節 第3節課:小紅書電商運營兩種玩法之多品店鋪解析 第4節課:小紅書電商運營兩種玩法之單品店鋪解析 第5節課:選品課(多品類類目推薦) 第6節課:選品課(多品類類目推薦) 第7節課:…

百度GL地圖實現某一段路的路況(new BMapGL.DrivingRouteLine)

功能描述&#xff1a; 1.百度地圖實現點擊地圖出現起點&#xff0c;再次點擊出現終點&#xff08;起點終點能拖動&#xff09;繪制完終點后獲取該路的路況并且起點和終點可以拖動實現實時更新&#xff08;新繪制的路段的&#xff09;路況 2.地點搜索 效果如下&#xff1a; 關鍵…