dubbo+nacos+Spring Boot
. Artikel ini tidak akan merangkumi terlalu banyak pengetahuan teori, tetapi akan menulis contoh paling mudah untuk menggambarkan bagaimana dubbo boleh disepadukan dengan nacos untuk membina persekitaran pembangunan dengan cepat.. Memanggil perihalan perhubungan
Untuk memudahkan pemahaman semua orang, berikut ialah kod Demo pengeluar dan pengguna yang sepadan, serta pusat pendaftaran yang digunakan. . cloud alibaba Hubungan yang sepadan antara mereka, versi yang dipilih dalam artikel ini adalah seperti berikut
SpringCloud Alibaba
untuk pembangunan, mula-mula buat projek induk jenis pom, terutamanya digunakan untuk pengurusan versi tindanan teknologi projek, buat projek maven bernama spring-cloud -alibaba-example, alih keluar fail src, ubah suai fail pom <span style="display: none;line-height: 1.6 !important;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;"><?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ah.wideth</groupId>
<artifactId>spring-cloud-alibaba-example</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<com-alibaba-cloud.version>2.2.7.RELEASE</com-alibaba-cloud.version>
</properties>
<!--对项目版本进行管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${com-alibaba-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project></pre><div class="contentsignin">Salin selepas log masuk</div></div></span>Projek yang dibuat seterusnya akan diletakkan dalam direktori ini Anda hanya perlu mengisytiharkan groupId dan artifactId, dan projek induk akan dirujuk secara automatik code style="padding: 2px 4px; border-radius : 4px;margin-right: 2px;margin-left: 2px;font-family: 'Operator Mono', Consolas, Monaco, Menlo, monospace;word-break: break- all;color: rgb(228, 105, 24) ;background-color: rgb(239, 239, 239);font-size: 0.875em;line-height: 1.6 !important;">spring-cloud-alibaba-example
versi. Ia bukanlah projek induk sebagai projek akar: setiap kali anda mempelajari teknologi baharu, projek induk sebenar akan dibuat dan banyak sub-projek akan dibuat di bawah projek induk yang sepadanKes dalam artikel ini ditulis berdasarkan contoh pembangunan nacos di atas. Mari mulakan membuat projek kami dan tampal struktur direktori saya.
Penerangan Modul
public-api
公共接口模块(接口),供服务消费者和服务提供者调用。dubbo-provider
服务提供者模块(接口实现类),引入了public-api
模块dubbo-consumer
服务消费者模块(controller
),引入了public-api
模块父工程pom文件
<?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> <artifactId>spring-cloud-alibaba-example</artifactId> <groupId>ah.wideth</groupId> <version>1.0-SNAPSHOT</version> </parent> <modules> <module>public-api</module> <module>dubbo-provider</module> <module>dubbo-consumer</module> </modules> <artifactId>dubbo-nacos-example</artifactId> <name>dubbo-nacos-example</name> <description>duboo与nacos整合的父工程</description> <packaging>pom</packaging> <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>2.7.13</dubbo.version> <nacos.version>1.4.1</nacos.version> </properties> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <!--解决nacos-client2.0报错的问题--> <exclusions> <exclusion> <artifactId>nacos-client</artifactId> <groupId>com.alibaba.nacos</groupId> </exclusion> </exclusions> </dependency> <!--dubbo相关--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos.version}</version> </dependency> <!-- 解决dubbo2.7.13jar包冲突问题--> <dependency> <groupId>com.alibaba.spring</groupId> <artifactId>spring-context-support</artifactId> <version>1.0.11</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
pom文件
<?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> <artifactId>dubbo-nacos-example</artifactId> <groupId>ah.wideth</groupId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>public-api</artifactId> <name>public-api</name> <description>api公用接口</description> <packaging>jar</packaging> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
公共接口模块里面只有一个接口,没有配置文件,打jar包
package ah.wideth.api; /** * 让生产者和服务消 * 费者来使用这个接口 */ public interface InfoService { String getInfo(); }
pom文件
<?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> <artifactId>dubbo-nacos-example</artifactId> <groupId>ah.wideth</groupId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>dubbo-provider</artifactId> <name>dubbo-provider</name> <description>dubbo的服务提供者模块</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入公共接口模块--> <dependency> <groupId>${project.groupId}</groupId> <artifactId>public-api</artifactId> <version>${project.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml配置文件
server: port: 8180 spring: application: name: dubbo-provider dubbo: registry: address: nacos://127.0.0.1:8848 #注册地址 application: name: dubbo-provider #应用名 protocol: name: dubbo #dubbo协议 port: 20880 #协议端口 scan: base-packages: ah.wideth.impl #扫包范围 provider: timeout: 30000 #超时时间
接口实现类,该类实现了上面我们在公共接口模块创建的接口
package ah.wideth.impl; import ah.wideth.api.InfoService; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Component; // dubbo提供的Service注解,用于声明对外暴露服务 // Service引入的是org.apache.dubbo.config.annotation.Service包 @Component @DubboService public class InfoServiceImpl implements InfoService { @Override public String getInfo() { return "hello,这里是dubbo-provider模块!"; } }
服务提供者启动类
package ah.wideth; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDubbo @EnableDiscoveryClient @SpringBootApplication public class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class, args); System.out.println("dubbo服务提供者8180启动了"); } }
pom文件
<?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> <artifactId>dubbo-nacos-example</artifactId> <groupId>ah.wideth</groupId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>dubbo-consumer</artifactId> <name>dubbo-consumer</name> <description>dubbo的服务消费者模块</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入公共接口模块--> <dependency> <groupId>${project.groupId}</groupId> <artifactId>public-api</artifactId> <version>${project.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml配置文件
server: port: 8181 spring: application: name: dubbo-consumer dubbo: registry: address: nacos://127.0.0.1:8848 #注册地址 application: name: dubbo-consumer #应用名 consumer: timeout: 30000 #超时时间
controller,调用公共接口模块创建的接口
package ah.wideth.controller; import ah.wideth.api.InfoService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class InfoController { //dumbo提供的Reference注解,用于调用远程服务 @DubboReference(check = false) private InfoService infoService; @GetMapping("/getInfo") public String getInfo(){ return infoService.getInfo(); } }
服务消费者启动类
package ah.wideth; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDubbo @EnableDiscoveryClient @SpringBootApplication public class DubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerApplication.class, args); System.out.println("dubbo服务消费者8181启动了"); } }
打开Nacos控制面板查看注册中心中的服务
启动nacos,启动服务提供者和服务消费者,调用服务消费者的getInfo方法,服务提供者会返回结果
本文编写了一个例子来对dubbo整合nacos进行服务调用的例子,不过要注意jar包的冲突问题。
Atas ialah kandungan terperinci Tutorial praktikal pembangunan SpringBoot+Dubbo+Nacos. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!