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服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java 事务注解@Transactional回滚(try catch、嵌套)问题
这篇文章主要介绍了Java @Transactional回滚(try catch、嵌套)问题,Spring 事务注解 @Transactional 本来可以保证原子性,如果事务内有报错的话,整个事务可以保证回滚,但是加上try catch或者事务嵌套,可能会导致事务回滚失败2022-08-08springboot+springsecurity如何实现动态url细粒度权限认证
这篇文章主要介绍了springboot+springsecurity如何实现动态url细粒度权限认证的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06
最新评论