Nacos 注册中心 - gRPC

3 篇文章 0 订阅
2 篇文章 0 订阅

Nacos 注册中心 - gRPC

在这里插入图片描述

前言

gRPC 一开始由 Google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。

与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

新秀Nacos出现就耀眼夺目,官网是这么介绍的:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。废话不多说,直接上代码。

一、创建Maven项目

当然注册Nacos得先下载Nacos服务器,下载安装可参考博主其他文章。

首先感谢fafeidou[1], 此项目部分源码来至fafeidou的项目https://github.com/fafeidou/fast-cloud-nacos

  1. 点击New Project

在这里插入图片描述

  1. 选择Maven

  2. 填写GroupId、ArtifactId

二、引入依赖

<dependencies>
    <dependency>
        <groupId>fast.cloud.nacos</groupId>
        <artifactId>fast-common-grpc</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.14</version>
    </dependency>
</dependencies>

如果报错 Error:(103,55) java: -source 1.5 中不支持方法引用,可以添加以下可以解决

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

三、编写代码

此项目proto使用fafeidou的,不再重新定义,项目已被封装好了,一个@GRpcService注解就可以实现gRPC的注册,具体实现可以下载源码进行查看。

项目结构

  • com/itsqh/client 客户端实现

  • com/itsqh/controller 客户端测试

  • com/itsqh/grpc proto 生成文件

  • com/itsqh/fast/cloud/nacos/common.grpc.* fafeidou项目封装代码

  • com/itsqh/service 服务端实现

proto文件
GrpcTestService.proto
syntax = "proto3";

option java_generic_services = true;
option java_multiple_files = true;
option java_outer_classname = "GrpcTestServiceProto";


service GrpcTestService {
    rpc reqString (GrpcTestService_Request_String) returns (GrpcTestService_Response_String) {};

    rpc reqStringClientStream (stream GrpcTestService_Request_String) returns (GrpcTestService_Response_String){};

    rpc reqStringServerStream (GrpcTestService_Request_String) returns(stream GrpcTestService_Response_String){};

    rpc reqStringBothStream (stream GrpcTestService_Request_String) returns(stream GrpcTestService_Response_String){};
}

message GrpcTestService_Request_String {
    string name = 1;
}

message GrpcTestService_Response_String {
    string result = 1;
}


GrpcNacosConfig.proto

fafeidou将配置文件写在了此文件中,读者可自行提取出来,改为读取配置文件

syntax = "proto3";


import "google/protobuf/descriptor.proto";

option java_generic_services = true;
option java_multiple_files = true;
option java_outer_classname = "GrpcNacosProto";


// this config is a must if you want to integrate nacos with grpc
extend google.protobuf.MessageOptions {

  int32 grpc_nacos_port = 50001;
  string nacos_uri = 50002;

}

message GrpcNacosOptions {

    option (nacos_uri) = "http://127.0.0.1:8848";
    option (grpc_nacos_port) = 50051;
}
服务实现类
import com.itsqh.grpc.GrpcTestServiceGrpc;
import com.itsqh.grpc.GrpcTestService_Request_String;
import com.itsqh.grpc.GrpcTestService_Response_String;
import fast.cloud.nacos.common.grpc.annoation.GRpcService;
import io.grpc.stub.StreamObserver;
import org.springframework.beans.factory.annotation.Value;

@GRpcService
public class GrpcTestServiceImpl extends GrpcTestServiceGrpc.GrpcTestServiceImplBase {
    @Value("${grpc.port}")
    private int port;

    @Override
    public void reqString(GrpcTestService_Request_String request,
                          StreamObserver<GrpcTestService_Response_String> 										responseObserver) {
        
        String name = request.getName();
        GrpcTestService_Response_String build = 
                GrpcTestService_Response_String.newBuilder()
                        .setResult("success: hello " + name)
                        .build();
        responseObserver.onNext(build);
        responseObserver.onCompleted();
    }
}
客户端实现
import com.itsqh.grpc.GrpcTestServiceGrpc;
import com.itsqh.grpc.GrpcTestService_Request_String;
import com.itsqh.grpc.GrpcTestService_Response_String;
import io.grpc.ManagedChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

@Service
public class HelloService {


    @Autowired
    ManagedChannel managedChannel;

    private GrpcTestServiceGrpc.GrpcTestServiceBlockingStub blockingStub;

    public String hello(String name) {
        GrpcTestService_Response_String grpcTestService_response_string = 
                blockingStub.reqString(
                        GrpcTestService_Request_String
                        .newBuilder()
                        .setName(name)
                        .build()
                );

        return grpcTestService_response_string.getResult();
    }


    @PostConstruct
    private void initializeClient() {
        blockingStub = GrpcTestServiceGrpc.newBlockingStub(managedChannel);
    }
}
编写测试
import com.itsqh.client.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @Autowired
    private HelloService helloService;

    @GetMapping("/{name}")
    public String sayHello(@PathVariable String name) {
        return helloService.hello(name);
    }
}

四、测试

启动服务

查看Nacos服务注册列表

客户端发送请求测试

参考资料

[1] fafeidou: https://github.com/fafeidou

以上仅为博主学习笔记,仅供参考。如有错误,感谢指出!抱拳。需要源码的关注公众号Java编程与思想后台回复ym

nacos-sdk-go是一个用于服务发现的开源软件包。它提供了一种简单且可靠的方式来实现服务发现功能,可以帮助开发人员更方便地构建分布式应用程序。 nacos-sdk-go基于Nacos开源项目开发,Nacos是阿里巴巴开源的一个服务发现和配置管理平台。nacos-sdk-go提供了一系列的API和函数,可以用于注册、发现和管理服务。它支持HTTP和GRPC协议,能够与不同编程语言和框架进行集成。 使用nacos-sdk-go进行服务发现非常简单。首先,我们需要在应用程序中导入nacos-sdk-go的包,并初始化一个Nacos客户端。然后,我们可以使用该客户端注册服务、获取服务列表以及注销服务。例如,我们可以使用RegisterInstance函数将一个实例注册到Nacos的服务注册表中。 当其他应用程序需要使用我们的服务时,它们可以使用nacos-sdk-go的DiscoverInstances函数来获取可用的服务实例列表。这样,我们的服务就可以被其他应用程序发现和使用了。 除了服务发现功能,nacos-sdk-go还提供了一些其他功能,如配置管理、动态配置刷新等。它可以帮助我们更好地管理和维护分布式应用程序的配置和服务。 总结来说,nacos-sdk-go是一个功能强大的服务发现工具,它可以帮助开发人员更方便地构建分布式应用程序。通过使用nacos-sdk-go,我们可以实现服务的注册、发现和管理,并能够与其他应用程序进行无缝集成,提高应用程序的可用性和可扩展性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值