springboot項(xiàng)目同時(shí)啟動(dòng)web服務(wù)和grpc服務(wù)的方法
前言
這是我在這個(gè)網(wǎng)站整理的筆記,有錯(cuò)誤的地方請(qǐng)指出
一. 創(chuàng)建項(xiàng)目
我們創(chuàng)建一個(gè)maven項(xiàng)目
如下,maven項(xiàng)目創(chuàng)建成功了
二. 引入依賴
引入spring-boot-starter-web依賴和grpc-client-spring-boot-starter依賴
<dependencies> <!-- BEGIN 如果想使用 Tomcat 注釋掉以下代碼 --> <!-- SpringBoot Web容器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> <version>2.5.4</version> </dependency> <!-- web 容器使用 undertow 性能更強(qiáng) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> <version>2.13.1.RELEASE</version> </dependency> <dependency> <groupId>net.devh</groupId> <artifactId>grpc-server-spring-boot-starter</artifactId> <version>2.13.1.RELEASE</version> </dependency> </dependencies> <build> <extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>1.6.2</version> </extension> </extensions> <plugins> <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <protocArtifact>com.google.protobuf:protoc:3.5.1-1:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.16.1:exe:${os.detected.classifier}</pluginArtifact> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>compile-custom</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
然后我們創(chuàng)建一個(gè)application.yml文件,指定兩個(gè)服務(wù)的啟動(dòng)端口,不要設(shè)置為一樣的端口,因?yàn)镠TTP和gRPC是兩個(gè)不同的協(xié)議,它們的實(shí)現(xiàn)方式和通信方式都不同。在同一個(gè)端口上同時(shí)使用HTTP和gRPC會(huì)導(dǎo)致端口沖突,無(wú)法正常工作。
# 開發(fā)環(huán)境配置 server: # 服務(wù)器的HTTP端口,默認(rèn)為8089 port: 8089 grpc: server: port: 9091
三. 測(cè)試
做完以上操作后,我們就可以編寫http服務(wù)和grpc服務(wù)了,以下是一個(gè)簡(jiǎn)單的測(cè)試代碼
啟動(dòng)類
/** * @author: 那就叫小智吧 * @date: 2023/9/18 14:50 * @Version 1.0 * @Description: */ @SpringBootApplication public class ChenApplication { public static void main(String[] args) { SpringApplication.run(ChenApplication.class, args); System.out.println("啟動(dòng)成功"); } }
3.1 http服務(wù)
創(chuàng)建一個(gè)HelloWordWebController接口
/** * @author: 那就叫小智吧 * @date: 2023/9/18 13:43 * @Version 1.0 * @Description: */ @RestController public class HelloWordWebController { @GetMapping(value = "/hello") public String hello() { return "神的孩子都在歌唱"; } }
測(cè)試結(jié)果
3.2 grpc服務(wù)
proto文件
syntax = "proto3"; option java_multiple_files = true; package helloWordGrpc; message Person { string first_name = 1; string last_name = 2; } message Greeting { string message = 1; } service HelloWorldService { rpc sayHello (Person) returns (Greeting); }
這里需要mvn clean 和mvn install 一下 ,確保target文件里面有這幾個(gè)對(duì)象
創(chuàng)建一個(gè)HelloWorldGrpcController接口
@GrpcService public class HelloWorldGrpcController extends HelloWorldServiceGrpc.HelloWorldServiceImplBase { @Override public void sayHello(Person request, StreamObserver<Greeting> responseObserver) { String message = "Hello " + request.getFirstName() + " " + request.getLastName() + "!"; Greeting greeting = Greeting.newBuilder().setMessage(message).build(); responseObserver.onNext(greeting); responseObserver.onCompleted(); } }
測(cè)試結(jié)果
四. 整體代碼結(jié)構(gòu)
到此這篇關(guān)于springboot項(xiàng)目同時(shí)啟動(dòng)web服務(wù)和grpc服務(wù)的方法的文章就介紹到這了,更多相關(guān)springboot啟動(dòng)web和grpc服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次
- idea啟動(dòng)多個(gè)SpringBoot服務(wù)實(shí)例的最優(yōu)解決方法
- centos7如何通過(guò)systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)
- IDEA中啟動(dòng)多個(gè)SpringBoot服務(wù)的實(shí)現(xiàn)示例
- springboot服務(wù)正常啟動(dòng)之后,訪問(wèn)服務(wù)url無(wú)響應(yīng)問(wèn)題及解決
- springboot項(xiàng)目如何在linux服務(wù)器上啟動(dòng)、停止腳本
- 解決springboot服務(wù)啟動(dòng)報(bào)錯(cuò):Unable?to?start?embedded?contain
- SpringBoot應(yīng)用剛啟動(dòng)時(shí)服務(wù)報(bào)大量超時(shí)的問(wèn)題及解決
相關(guān)文章
Java數(shù)據(jù)脫敏實(shí)現(xiàn)的方法總結(jié)
數(shù)據(jù)脫敏,指的是對(duì)某些敏感信息通過(guò)脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),本文主要是對(duì)后端數(shù)據(jù)脫敏實(shí)現(xiàn)的簡(jiǎn)單總結(jié),希望對(duì)大家有所幫助2023-07-07解決IDEA中下載free maven plugin插件無(wú)效的問(wèn)題
這篇文章主要介紹了解決IDEA中下載free maven plugin插件無(wú)效的問(wèn)題,本文通過(guò)圖文并茂的形式給大家分享解決方案,供大家參考,需要的朋友可以參考下2020-11-11SpringBoot?注解?@AutoConfiguration?在?2.7?版本中被新增的使用方法詳解
這篇文章主要介紹了SpringBoot?注解?@AutoConfiguration?在?2.7?版本中被新增(使用方法),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09Java EasyExcel導(dǎo)出報(bào)內(nèi)存溢出的解決辦法
使用EasyExcel進(jìn)行大數(shù)據(jù)量導(dǎo)出時(shí)容易導(dǎo)致內(nèi)存溢出,特別是在導(dǎo)出百萬(wàn)級(jí)別的數(shù)據(jù)時(shí),你有遇到過(guò)這種情況嗎,以下是小編整理的解決該問(wèn)題的一些常見方法,需要的朋友可以參考下2024-10-10spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝)
本文主要介紹了spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)
這篇文章主要介紹了Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用(1)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11