springboot项目同时启动web服务和grpc服务的方法
作者:神的孩子都在歌唱
本文主要介绍了springboot项目同时启动web服务和grpc服务的方法,通过实际代码示例展示了实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前言
这是我在这个网站整理的笔记,有错误的地方请指出
一. 创建项目
我们创建一个maven项目
如下,maven项目创建成功了
二. 引入依赖
引入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 性能更强 --> <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>
然后我们创建一个application.yml文件,指定两个服务的启动端口,不要设置为一样的端口,因为HTTP和gRPC是两个不同的协议,它们的实现方式和通信方式都不同。在同一个端口上同时使用HTTP和gRPC会导致端口冲突,无法正常工作。
# 开发环境配置 server: # 服务器的HTTP端口,默认为8089 port: 8089 grpc: server: port: 9091
三. 测试
做完以上操作后,我们就可以编写http服务和grpc服务了,以下是一个简单的测试代码
启动类
/** * @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("启动成功"); } }
3.1 http服务
创建一个HelloWordWebController接口
/** * @author: 那就叫小智吧 * @date: 2023/9/18 13:43 * @Version 1.0 * @Description: */ @RestController public class HelloWordWebController { @GetMapping(value = "/hello") public String hello() { return "神的孩子都在歌唱"; } }
测试结果
3.2 grpc服务
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文件里面有这几个对象
创建一个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(); } }
测试结果
四. 整体代码结构
到此这篇关于springboot项目同时启动web服务和grpc服务的方法的文章就介绍到这了,更多相关springboot启动web和grpc服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!