中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

建設(shè)銀行河南省分行網(wǎng)站愛(ài)站網(wǎng) 關(guān)鍵詞挖掘工具站長(zhǎng)工具

建設(shè)銀行河南省分行網(wǎng)站,愛(ài)站網(wǎng) 關(guān)鍵詞挖掘工具站長(zhǎng)工具,吉林做網(wǎng)站的公司,圖片設(shè)計(jì)網(wǎng)站有哪些文章目錄 前言項(xiàng)目結(jié)構(gòu)代碼示例父工程api moduleservice module 注意事項(xiàng)區(qū)別 本文記錄下SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫(xiě)過(guò)程中的區(qū)別。 下面還有投票,幫忙投個(gè)票👍 前言 Dubbo 在 2.7.5 版本開(kāi)始支持原生 gRP…

文章目錄

  • 前言
  • 項(xiàng)目結(jié)構(gòu)
  • 代碼示例
    • 父工程
    • api module
    • service module
  • 注意事項(xiàng)
  • 區(qū)別

本文記錄下SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫(xiě)過(guò)程中的區(qū)別。
下面還有投票,幫忙投個(gè)票👍

前言

Dubbo 在 2.7.5 版本開(kāi)始支持原生 gRPC 協(xié)議,對(duì)于計(jì)劃使用 HTTP/2 通信或者期望 gRPC 協(xié)議支持服務(wù)治理能力的,都可以考慮接入 Dubbo 體系啟用 gRPC 協(xié)議。

由于官網(wǎng)給的 代碼示例 是基于 spring,現(xiàn)在基本上都是基于SpringBoot開(kāi)發(fā),所以本文提供一下 SpringBoot 的代碼示例。

此外還會(huì)簡(jiǎn)單說(shuō)明 Dubbo 支持的原生 gRPC 協(xié)議與原生 gRPC 協(xié)議在代碼開(kāi)發(fā)時(shí)的區(qū)別。

如果對(duì)gRPC協(xié)議不了解的,后續(xù)文章會(huì)有更新,請(qǐng)持續(xù)關(guān)注。

項(xiàng)目結(jié)構(gòu)

根據(jù)現(xiàn)在微服務(wù)開(kāi)發(fā)的常見(jiàn)方式,先搭建一個(gè)項(xiàng)目,結(jié)構(gòu)如下
在這里插入圖片描述

這樣的項(xiàng)目結(jié)構(gòu)可以將服務(wù)的聲明和實(shí)現(xiàn)隔離開(kāi),如果有 client 調(diào)用,直接添加api module 的依賴即可。

代碼示例

項(xiàng)目結(jié)構(gòu)確定好后需要做三件事

  1. 在項(xiàng)目中需要用到 grpc 和 dubbo 相關(guān)依賴,所以在父工程中的 pom.xml 文件添加兩者的 BOM。
  2. gRPC 支持的序列化協(xié)議為 protobuf,我們?cè)?api module 下添加 gRPC 所需依賴、插件以及 proto IDL文件。
  3. 在 service module 添加相關(guān)配置并進(jìn)行 api service 的實(shí)現(xiàn)。

詳細(xì)代碼如下:

父工程

父工程中的 pom.xml 文件添加 grpc 和 dubbo 的 BOM。
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.demo</groupId><artifactId>nava</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>nava</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><dubbo.version>3.1.7</dubbo.version><grpc.version>1.44.1</grpc.version><spring-boot.version>2.6.11</spring-boot.version></properties><modules><module>nava-api</module><module>nava-service</module></modules><dependencyManagement><dependencies><dependency><groupId>io.grpc</groupId><artifactId>grpc-bom</artifactId><version>${grpc.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.demo</groupId><artifactId>nava-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>com.demo</groupId><artifactId>nava-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>

api module

在 api module 中的 pom.xml 文件添加 dubbo 、gRPC 所需依賴、插件。
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.demo</groupId><artifactId>nava</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><artifactId>nava-api</artifactId><name>nava-api</name><description>api 模塊,對(duì)外提供的 API</description><dependencies><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty</artifactId><exclusions><exclusion><groupId>io.netty</groupId><artifactId>netty-codec-http2</artifactId></exclusion><exclusion><groupId>io.netty</groupId><artifactId>netty-handler-proxy</artifactId></exclusion></exclusions></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty-shaded</artifactId></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-common</artifactId></dependency></dependencies><build><plugins><plugin><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.7.1</version><executions><execution><id>os-maven-plugin</id><phase>initialize</phase><goals><goal>detect</goal></goals></execution></executions></plugin><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.6.1</version><configuration><protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact><pluginId>grpc-java</pluginId><pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact><protocPlugins><protocPlugin><id>dubbo-grpc</id><groupId>org.apache.dubbo</groupId><artifactId>dubbo-compiler</artifactId><version>0.0.1</version><mainClass>org.apache.dubbo.gen.grpc.DubboGrpcGenerator</mainClass></protocPlugin></protocPlugins></configuration><executions><execution><id>protobuf-maven-plugin</id><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build></project>

在main文件夾下面創(chuàng)建proto文件夾,以及 DemoService.proto 文件。
在這里插入圖片描述

DemoService.proto

syntax = "proto3";option java_multiple_files = true;
option java_package = "com.demo.nava";
option java_outer_classname = "DemoServiceProto";
option objc_class_prefix = "DSP";// The greeting service definition.
service DemoService {// Sends a greetingrpc service (RequestData) returns (ResponseData) {}
}// The request message containing the user's name.
message RequestData {string name = 1;
}// The response message containing the greetings
message ResponseData {string message = 1;
}

service module

在 service module 中的 pom.xml 文件添加 api module 的依賴以及 dubbo 其他依賴。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.demo</groupId><artifactId>nava</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><artifactId>nava-service</artifactId><name>nava-service</name><description>service 模塊,存放核心業(yè)務(wù)邏輯代碼</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.demo</groupId><artifactId>nava-api</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.6.11</version><configuration><mainClass>com.demo.nava.NavaApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

application.properties 文件中添加 dubbo 相關(guān)配置

application.properties


# 設(shè)置dubbo傳輸協(xié)議
dubbo.protocol.name=grpc
dubbo.protocol.port=-1
# dubbo nacos注冊(cè)中心說(shuō)明 https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/
dubbo.registry.address: nacos://nacos:nacos@${nacos.address:127.0.0.1}:8848

在 SpringBoot 啟動(dòng)類添加 @EnableDubbo 注解

在這里插入圖片描述

添加 DemoServiceImpl 實(shí)現(xiàn)類進(jìn)行業(yè)務(wù)編碼。

DemoServiceImpl.java

package com.demo.nava.service;import com.demo.nava.DubboDemoServiceGrpc;
import com.demo.nava.RequestData;
import com.demo.nava.ResponseData;
import io.grpc.stub.StreamObserver;
import org.apache.dubbo.config.annotation.DubboService;@DubboService
public class DemoServiceImpl extends DubboDemoServiceGrpc.DemoServiceImplBase implements DubboDemoServiceGrpc.IDemoService {@Overridepublic void service(RequestData request, StreamObserver<ResponseData> responseObserver) {ResponseData reply = ResponseData.newBuilder().setMessage("Hello " + request.getName()).build();responseObserver.onNext(reply);responseObserver.onCompleted();}
}

注意事項(xiàng)

經(jīng)過(guò)以上的步驟,一個(gè)簡(jiǎn)單的 SpringBoot 集成 Dubbo 啟用 gRPC 協(xié)議的示例就完成了。這個(gè)時(shí)候直接啟動(dòng)項(xiàng)目是會(huì)報(bào)錯(cuò)的,因?yàn)閜rotobuf相關(guān)的代碼還沒(méi)生成,我們需要對(duì)項(xiàng)目進(jìn)行 maven install 以及 maven reload 操作。

maven install 的目的是為了生成protobuf相關(guān)代碼,這個(gè)時(shí)候我們可以在 target 中看到

在這里插入圖片描述

maven reload 的目的是為了更新加載 pom.xml 文件,從而將 api module 中生成的代碼加載到 service module。

操作后就可以成功啟動(dòng)項(xiàng)目了。

區(qū)別

在項(xiàng)目啟動(dòng)成功后可以回頭看下 Dubbo 支持的原生 gRPC 與原生 gRPC 在代碼編寫(xiě)過(guò)程中的區(qū)別

  1. maven plugin 的區(qū)別,dubbo 在原先的基礎(chǔ)上添加了 dubbo-grpc 的 plugin,目的是生成擴(kuò)展的代碼做到對(duì) grpc 的支持。
    在這里插入圖片描述
    對(duì)應(yīng)生成的代碼如下
    在這里插入圖片描述

  2. service 實(shí)現(xiàn)區(qū)別,dubbo-grpc 的 plugin 生成了 dubbo 相關(guān)的 protobuf 的代碼,所以在實(shí)現(xiàn)上有所區(qū)別。
    在這里插入圖片描述

  3. RPC 調(diào)用區(qū)別,因?yàn)?grpc 接入了 dubbo 體系,所以使用 Dubbo 風(fēng)格,基于接口的編程來(lái)定義和使用遠(yuǎn)程服務(wù)。
    在這里插入圖片描述

http://www.risenshineclean.com/news/57215.html

相關(guān)文章:

  • 化工產(chǎn)品網(wǎng)站建設(shè)百度關(guān)鍵詞優(yōu)化公司哪家好
  • 營(yíng)銷型網(wǎng)站建設(shè)百度網(wǎng)站的網(wǎng)址
  • 石家莊網(wǎng)站建設(shè)案例網(wǎng)絡(luò)推廣員怎么做
  • 姐妹直播河南網(wǎng)站建設(shè)優(yōu)化技術(shù)
  • 做采集網(wǎng)站賺錢(qián)嗎全網(wǎng)自媒體平臺(tái)大全
  • h5彩票網(wǎng)站怎么做百度權(quán)重排名查詢
  • 網(wǎng)站畢業(yè)設(shè)計(jì)圖怎么做培訓(xùn)學(xué)校機(jī)構(gòu)
  • 做本地網(wǎng)站賺錢(qián)百度收錄的網(wǎng)站
  • 彩票做的最好是個(gè)網(wǎng)站好佛山seo培訓(xùn)機(jī)構(gòu)
  • 開(kāi)發(fā)什么網(wǎng)站好seo名詞解釋
  • 企業(yè)管理研究生學(xué)校排名seo引擎優(yōu)化怎么做
  • 一個(gè)人做網(wǎng)站原型網(wǎng)絡(luò)推廣團(tuán)隊(duì)哪家好
  • 上海浦東新區(qū)建設(shè)和交通委員會(huì)網(wǎng)站網(wǎng)絡(luò)熱詞作文
  • 那個(gè)網(wǎng)站做境外自由行便宜電商營(yíng)銷推廣方案
  • 怎么做有趣的視頻網(wǎng)站軟文范例200字
  • 做簡(jiǎn)歷的網(wǎng)站有抖音seo關(guān)鍵詞排名技術(shù)
  • 網(wǎng)站建設(shè)與制作教程百度競(jìng)價(jià)點(diǎn)擊價(jià)格
  • 婚慶公司網(wǎng)站搭建免費(fèi)com域名申請(qǐng)注冊(cè)
  • 公司網(wǎng)站要怎么做正規(guī)電商培訓(xùn)班
  • 黑龍江電商網(wǎng)站建設(shè)廣州seo工程師
  • 杭州濱江網(wǎng)站建設(shè)公司整合營(yíng)銷是什么
  • 河南手機(jī)網(wǎng)站建設(shè)公司哪家好seo網(wǎng)站關(guān)鍵詞排名軟件
  • 月嫂云商城網(wǎng)站建設(shè)百度廣告聯(lián)盟下載
  • 揚(yáng)州市江都區(qū)城鄉(xiāng)建設(shè)局網(wǎng)站愛(ài)站網(wǎng)關(guān)鍵詞排名
  • 中英版網(wǎng)站系統(tǒng)企業(yè)網(wǎng)絡(luò)推廣計(jì)劃書(shū)
  • 上海期貨配資網(wǎng)站開(kāi)發(fā)上google必須翻墻嗎
  • 服務(wù)網(wǎng)絡(luò)營(yíng)銷的含義太原seo推廣
  • 如何做跨境電商新手入門(mén)教程seo排名如何
  • 外包客服公司好做嗎首頁(yè)排名seo
  • 珠海市網(wǎng)站開(kāi)發(fā)公司seo競(jìng)價(jià)