环境搭建
1. 安装Nacos2.0
2. 创建spring boot基础工程
创建一个父工程,三个子工程:
- 服务提供方
- 服务提供方接口
- 服务消费方
引入依赖
说明
去alibaba看了下spring-cloud-starter-dubbo,发现最新版dubbo版本停留在2.7.x系列。
然后搜了下dubbo-spring-boot-project,发现已经被移入到dubbo仓库中去了。
然后找到dubbo源码,发现了dubbo集成spring boot的相关代码,所以这里直接使用spring boot集成包,cloud的版本可能还要等等,这里要注意一下。
父工程依赖
主要指定各版本依赖,重点是dubbo-bom。
<?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>org.example</groupId>
<artifactId>dubbo-demo-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>dubbo-demo-produce</module>
<module>dubbo-demo-produce-api</module>
<module>dubbo-demo-consume</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--Spring-->
<spring.boot.version>2.2.13.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR3</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--Spring版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.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.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>3.0.2.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>apache.snapshots.https</id>
<name>Apache Development Snapshot Repository</name>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-plugin</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
子工程依赖(提供,消费方都需要引入)
主要引入dubbo和nacos相关pom,这里没指定版本,因为是由dubbo-bom控制了。
<?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>org.example</groupId>
<artifactId>dubbo-demo-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.pearl</groupId>
<artifactId>dubbo-demo-produce</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-demo-produce</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<dubbo.version>3.0.2</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-demo-produce-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
集成dubbo
服务提供方
1、 yml添加springboot基础配置及dubbo配置;
spring:
application:
name: dubbo-demo-produce
server:
port: 8888
dubbo:
# 注册中心地址
registry:
address: nacos://127.0.0.1:8848
# 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
protocol:
port: 20880
name: dubbo
1、 dubbo-demo-produce-api包创建服务接口,提供方需要实现它,消费方则需要注入这个接口;
public interface DemoService {
String sayName(String name);
String sayHello(String name);
default CompletableFuture<String> sayHelloAsync(String name) {
return CompletableFuture.completedFuture(sayHello(name));
}
}
1、 提供方实现接口,并使用@DubboService注解发布到注册中心,(之前是@Service);
@DubboService(version = "1.0.0")
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String sayName(String name) {
return name;
}
@Override
public String sayHello(String name) {
return "Hello " + name + ", response from provider: " + RpcContext.getServiceContext().getLocalAddress();
}
@Override
public CompletableFuture<String> sayHelloAsync(String name) {
return null;
}
}
1、 启动类添加@EnableDubbo注解,扫描提供方配置的远程注册接口;
@SpringBootApplication
@EnableDubbo(scanBasePackages = "org.pearl.dubbodemoproduce.service")
public class DubboDemoProduceApplication {
public static void main(String[] args) {
SpringApplication.run(DubboDemoProduceApplication.class, args);
}
}
服务消费方
1、 和提供方一样,添加配置,启动类添加注解即可,注意服务名称需要换;
2、 远程调用提供方服务,使用@DubboReference注解引入api包中的接口(之前是@Reference);
@RestController
@RequestMapping("/user")
public class TestController {
@DubboReference(check = false,version ="1.0.0")
DemoService demoService;
@RequestMapping("/test")
public String test() {
return demoService.sayName("haha");
}
}
测试
1. 启动nacos、提供方、消费方
查询nacos控制台,可发现,服务被成功注册了上来。
点击详情,可以看到提供接口元数据的详细信息。
2. 调用接口
我们访问消费方的接口,发现,成功调用了提供方的接口,案例完成。
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: