简单微服务项目搭建

本示例服务注册中心使用nacos-discovery,配置中心使用nacos-config,网关使用Spring Clound Gateway,服务间调用使用Feign
示例中会创建 3 个服务:gateway-demo(网关)、demo1(服务1)和 demo2(服务2),其中 gateway-demo 使用 8080 端口,demo1 使用 8081 端口,demo2 使用 8082 端口。

1、启动 nacos server (本示例 nacos-server 安装在本地)并创建上述 3 个服务对应的配置文件

gateway-demo.yml

spring:
    cloud:
        gateway:
            routes:
                - id: route1
                  uri: http://localhost:8081
                  filters:
                    - StripPrefix=0
                  predicates:
                    - Path=/demo1/**

                - id: route2
                  uri: http://localhost:8082
                  filters:
                    - StripPrefix=0
                  predicates:
                    - Path=/demo2/**

文件中配置了 demo1 和 demo2 两个路由。
demo1.yml

author:
    name: young1

demo2.yml

author:
    name: young2

demo1,demo2 配置文件中简单配置了一个属性,用于后续测试能否正常读取 nacos 上的配置文件用。

2、创建网关服务 gateway-demo

使用 Spring Initializr 创建项目,完成后添加nacos-discoverynacos-config以及Spring Clound Gateway依赖


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery
    2.2.1.RELEASE


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config
    2.2.1.RELEASE


    org.springframework.cloud
    spring-cloud-starter-gateway
    2.2.5.RELEASE

注意:SpringBootSpringClound之间版本冲突问题,本示例 SpringBoot使用 2.2.5.RELEASE 版本。且网关服务中如果有对spring-boot-starter-web的依赖则需要排除该依赖,因为它会与 Spring Cloud Gateway 的 webflux 冲突。
编辑配置文件 bootstrap.yml

server:
  port: 8080

spring:
  application:
    name: gateway-demo
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yml
      discovery:
        server-addr: localhost:8848

3、创建 demo1 服务

使用 Spring Initializr 创建 Spring Web 项目,完成后添加nacos-discoverynacos-config以及Feign依赖


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery
    2.2.1.RELEASE


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config
    2.2.1.RELEASE


    org.springframework.cloud
    spring-cloud-starter-openfeign
    2.2.5.RELEASE

编辑配置文件 bootstrap.yml

server:
  port: 8081

spring:
  application:
    name: demo1
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yml
      discovery:
        server-addr: localhost:8848

在 demo1 启动类上添加@EnableFeignClients注解,启用 Feign。
新建 FeignClient 类

@FeignClient("demo2")
public interface RemoteService {

    /**
     * 获取其他服务数据
     *
     * @return String
     */
    @GetMapping("/remote/method")
    String getDataFromRemote();
}

新建远程调用 Controller

@RestController
@RequestMapping("/remote")
public class RemoteController {

    @GetMapping("/method")
    public String method() {
        return "data from demo1";
    }
}

新建测试 Controller

@RestController
@RequestMapping("/test")
public class TestController {

    @Value("${author.name}")
    private String authorName;

    @Autowired
    private RemoteService remoteService;

    @GetMapping("/method")
    public String method() {
        return "demo1 content: " + authorName + ", feign call result: " +
                remoteService.getDataFromRemote();
    }
}

4、创建 demo2 服务

编辑配置文件

server:
  port: 8082

spring:
  application:
    name: demo2
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yml
      discovery:
        server-addr: localhost:8848

其他各文件代码参考 demo1

5、运行各服务测试

分别运行上面创建的 3 个服务,如果运行正常,我们在 nacos-server 上(http://localhost:8848/nacos/index.html)的服务列表中可以看到服务名分别为gateway-demodemo1demo2的 3 个服务。
然后访问 http://localhost:8080/demo1/test/method,可以看到如下内容:

demo1 content: young1, data from demo2: demo2 feign调用返回结果

再访问 http://localhost:8080/demo2/test/method

demo2 content: young2, data from demo1: demo1 feign调用返回结果

可以看到 demo1 和 demo2 都可通过网关正常访问,还可以正确读取 nacos 配置文件里的配置项,并且 demo1 和 demo2 之间也可以通过 Feign 互相调用对方的方法。

你可能感兴趣的:(简单微服务项目搭建)