本文介绍: 然后我们创建一个application.yml文件,指定两个服务启动端口,不要设置为一样的端口,因为HTTP和gRPC是两个不同的协议,它们的实现方式通信方式都不同。引入springbootstarterweb依赖grpcclientspringbootstarter依赖。这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新作者:神的孩子都在歌唱。做完以上操作后,我们可以编写http服务grpc服务了,以下是一个简单测试代码作者:神的孩子都在歌唱。

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱

一. 创建项目

我们创建一个maven项目

image-20230918105933085

如下,maven项目创建成功了

image-20230918112649578

二. 引入依赖

引入springbootstarter-web依赖grpcclientspringboot-starter依赖

 <dependencies&gt;
        <!-- BEGIN 如果想使用 Tomcat 注释掉以下代码 --&gt;
        <!-- SpringBoot Web容器 --&gt;
        <dependency&gt;
            <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 "神的孩子都在歌唱";
    }
}

测试结果

image-20230918145649999

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文件里面有这几个对象

image-20230918151931848

创建一个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();
  }
}

测试结果

image-20230918151504401

四. 整体代码结构

image-20230918152154104

作者:神的孩子都在歌唱
本人博客https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接

原文地址:https://blog.csdn.net/weixin_46654114/article/details/134617733

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10321.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注