Spring Cloud Alibaba之nacos注册中心使用篇

本文基于 spring cloud alibaba v2.1.0 与spring cloud Greenwich.RELEASE 版本
所有spring cloud 系列文章源码地址: github
访问tag:v1.0-netflix 可以获得到 spring cloud netflix 组件的演示源码
切换v2.0-alibaba 分支可以访问到有关spring cloud alibaba 组件的源码

1.环境准备

1.1 nacos server单机部署

首先我们要去github下载nacos的server端: 链接,选择你需要的版本,当然你也可以把源码download下来,自己编译。
在这里插入图片描述
**注:**如果感觉github 访问太慢可以使用我这边放在百度云的一个包:

链接: https://pan.baidu.com/s/1WZWEDWrdWxTCzZV0jh7eBw 密码: 7emt

然后解压启动,启动方式
linux/mac os:startup.sh -m standalone 这里这个standalone是单机模式,不是集群模式
windows:startup.cmd 或者双击:startup.cmd文件。
详细信息访问官网文档:nacos官网文档

启动完成之后,我们可以浏览器访问 :http://127.0.0.1:8848/nacos/ 注意:账号密码 nacos/nacos
在这里插入图片描述
这里我们nacos 的单机环境就ok了。

1.2 代码环境

代码环境的话可以直接去github拉文章的演示源码: 链接,当然也可以自己重新集成一套。
spring-cloud-parent(这是项目父工程 管理了一些基础依赖,springcloud 版本管理)
–spring-cloud-user-service-consumer(用户服务,同样也是服务调用者)
–spring-cloud-order-service-provider(订单服务,服务提供者角色)

2. 简单集成使用

2.1 父工程改造

在父工程 spring-cloud-parent 中的pom.xml中我们需要对spring cloud alibaba 版本进行管理

<dependencyManagement>
    <!--引入springcloud依赖的-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--spring cloud alibaba -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2 订单服务改造

2.2.1 pom 依赖

如果是用的其他springcloud文章里面的环境,或者是github clone下来的tag:v1.0-netflix环境代码,需要将Eureka 客户端的依赖注释掉,并且添加nacos的依赖

  <!--添加 spring cloud alibaba  nacos 作为注册中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2.2 配置文件

如果有eureka client 的配置,需要注释掉。
添加nacos的配置

spring:
  cloud:
    nacos:
      discovery:
      	# nacos server地址
        server-addr: 127.0.0.1:8848
2.2.3 主启动类

如果新项目或者是使用@EnableEurekaClient注解的,需要将这个注解注释掉,换成@EnableDiscoveryClient
在这里插入图片描述

2.2.4 对外提供服务

需要编写一个controller,对外提供服务

@RestController
@RequestMapping("/order/data")
public class OrderStatisticServiceController {
    @Value("${server.port}")
    private Integer port;
    @Value("${spring.application.name}")
    private String appName;
    /**
     * 根据用户id获取今日完单数
     * @param id 用户ID
     * @return  完单数
     */
    @GetMapping("/getTodayFinishOrderNum/{id}")
    public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
        System.out.println("我是"+port);
        return port;
    }
}
2.2.5 启动服务

我们启动这个订单服务,观察下nacos的管理界面,在服务列表这一栏中,发现我们的服务已经注册上了。
在这里插入图片描述

2.3 用户服务改造

2.3.1 常规改造

这里maven坐标依赖 ,配置类(**注意:**这里需要注意的是,如果是使用的tag:v1.0-netflix环境,需要把bootstrap.yml 注释掉,把有关链路采集的也注释掉),主启动类 与2.1章节 订单服务的改造一样

2.3.2 controller 改造
2.3.2.1 fegin方式调用
@RestController
@RequestMapping("/user/data")
public class UserCenterController {
    @Autowired
    private OrderStatisticFeginClient orderStatisticFeginClient;
    @GetMapping("/getTodayStatistic/{id}")
    public Integer getTodayStatistic(@PathVariable("id") Integer id){
        Integer todayFinishOrderNum = orderStatisticFeginClient.getTodayFinishOrderNum(id);
        return todayFinishOrderNum;
    }
}

我这里是使用fegin进行的远程调用,如果没有集成fegin,可以使用resttemplate的方式来来调用

2.3.2.2 restTemplate方式调用
 	@Autowired
    private RestTemplate restTemplate;
	@Autowired
	private DiscoveryClient discoveryClient;

    @GetMapping("/getTodayStatistic/{id}")
    public Integer getTodayStatistic(@PathVariable("id") Integer id){
        List<ServiceInstance> instances = discoveryClient.getInstances("spring-cloud-order-service-provider");
        // 获取第一个服务信息
        ServiceInstance instanceInfo = instances.get(0);
        //获取ip
        String ip = instanceInfo.getHost();
        //获取port
        int port = instanceInfo.getPort();
        String url  ="http://"+ip+":"+port+"/order/data/getTodayFinishOrderNum/"+id;
        return restTemplate.getForObject(url, Integer.class);
    }
2.3.3 启动注册

启动用户服务,访问nacos的管理平台,我们可以看到用户服务已经注册上了
在这里插入图片描述

2.4 调用测试

我们直接浏览器或者postman 访问http://127.0.0.1:8080/user/data/getTodayStatistic/100 调用,可以看到返回的结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuanshangshenghuo/article/details/107500755