简单微服务项目搭建

本示例服务注册中心使用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依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

注意: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依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

编辑配置文件 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 互相调用对方的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容