写一个小项目来练习通过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










