欢迎来到我的博客,代码的世界里,每一行都是一个故事
前言
微服务架构已经成为现代应用开发的热门趋势,而Dubbo作为一款强大的分布式服务框架,与Spring Boot的结合是构建高性能微服务应用的理想选择。就像拼装一把锋利的刀刃,让我们一起揭开Spring Boot整合Dubbo的神秘面纱,探索如何在分布式世界中获得竞争优势。
项目结构
主项目(作为主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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>fun.bo</groupId> <artifactId>dubbo-studys</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>dubbo-provider</module> <module>dubbo-interface</module> <module>dubbo-consumer</module> </modules> <properties> <java.version>1.8</java.version> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <dubbo-version>2.7.8</dubbo-version> <spring-boot.version>2.3.0.RELEASE</spring-boot.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Apache Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-bom</artifactId> <version>${dubbo-version}</version> <type>pom</type> <scope>import</scope> </dependency> <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</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> </dependencyManagement> <dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo-version}</version> </dependency> <!-- Dubbo核心组件 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <!--Spring Boot 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> </dependency> <!-- Zookeeper客户端框架 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <!-- Zookeeper dependencies --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo-version}</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
接口
package fun.bo.api; /** * @author todoitbo * @date 2024/1/12 */ public interface TestDubboService { String sayHello(String name); }
服务提供者
properties文件
# 服务端口 server.port=18081 # 应用程序名称 spring.application.name=dubbo-provider # Dubbo服务扫描路径 dubbo.scan.base-packages=fun.bo # Dubbo 通讯协议 dubbo.protocol.name=dubbo # Dubbo服务提供的端口, 配置为-1,代表为随机端口 默认20880 dubbo.protocol.port=-1 ## Dubbo 注册器配置信息 dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache dubbo.spring.provider.version = 1.0.0
实现类
package fun.bo.iml; import fun.bo.api.TestDubboService; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.beans.factory.annotation.Value; /** * @author todoitbo * @date 2024/1/12 */ @DubboService(version = "${dubbo.spring.provider.version}") public class TestDubboServiceImpl implements TestDubboService { @Override public String sayHello(String name) { return "hello " + name; } }
服务消费者
properties
# 服务端口 server.port=18084 #服务名称 spring.application.name=dubbo-spring-consumer #服务版本号 dubbo.spring.provider.version = 1.0.0 #消费端注册器配置信息 dubbo.registry.address=zookeeper://127.0.0.1:2181 #dubbo.consumer.check=false dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
接口层
package fun.bo.controller; import fun.bo.api.TestDubboService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** * @author todoitbo * @date 2024/1/12 */ @RestController public class TestDubboController { @DubboReference(version = "${dubbo.spring.provider.version}") private TestDubboService testDubboService; @GetMapping("/test-dubbo/{name}") public String testDubbo(@PathVariable String name) { return testDubboService.sayHello(name); } }
实现效果图