写一个小项目来练习通过Dubbo远程调用
架构
- SpringBoot
- Spring Cloud
- Spring Cloud Alibaba
- Dubbo
- Nacos
依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>3.0.2.1</version>
</dependency>
注意Spring Boot 与 Spring Cloud 、 Cloud Alibaba的依赖版本 Spring Boot 2.6.3 、Spring Cloud 2021.0.1.0 、 Spring Cloud Alibaba 2021.0.1
编写API层
Spring-boot-dubbo-demo-interface
package com.xin.demo.service;
public interface IUserService {
String sayHi (String name);
}
编写提供者
Spring-boot-demo-provider
提供者需要依赖API层实现其方法
引入API依赖
<dependency>
<groupId>com.xin</groupId>
<artifactId>spring-dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
实现API接口 为实现类添加 @DubboService注解
@DubboService
public class IUserImpl implements IUserService {
@Override
public String sayHi(String name) {
return "你好, " + name;
}
}
编写启动类 添加 @EnableDubboConfig注解
@SpringBootApplication
@EnableDubboConfig
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
编写配置文件
# 为项目起一个名字
spring.application.name=spring-dubbo-provider
# 为当前Dubbo暴露的接口起一个唯一标识
dubbo.application.id=spring-dubbo-provider
# 为当前服务存放在注册中心中起一个名字
dubbo.application.name=spring-dubbo-provider
# 注册中心地址
dubbo.registry.address=nacos://192.168.1.72:8848
# 以下提供者必须配置
# 暴露接口的协议
dubbo.protocol.name=dubbo
# 暴露接口的端口
dubbo.protocol.port=20880
消费者
spring-dubbo-demo-consumer
需要引入提供者的依赖
<dependency>
<groupId>com.xin</groupId>
<artifactId>spring-dubbo-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
编写Controller层 , 用@DubboReference引入消费者
@RestController
@RequestMapping("/user")
public class UserController {
@DubboReference
private IUserService userService;
@GetMapping
public String sayHi () {
return userService.sayHi("zhangsan");
}
}
编写启动类
@SpringBootApplication
@EnableDubboConfig
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
编写配置文件
spring.application.name=spring-dubbo-consumer
dubbo.application.id=spring-dubbo-consumer
dubbo.application.name=spring-dubbo-consumer
dubbo.registry.address=nacos://192.168.1.72:8848
server.port=9090