Spring Cloud之Alibaba Nacos

2020-09-26  本文已影响0人  xiaoqiaobian

一、Nacos概念
Nacos 是阿里巴巴在服务发现与配置管理领域开源的新产品,由在其内部生产上久经考验的相关产品如 Diamond,VIPServer 等演化而来。而其中的服务发现功能,在内部支撑着百万级的连接和亿级的 QPS 服务调用。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

支持服务类型 Nacos 的关键特性
Kubernetes Service 服务发现和服务健康监测
gRPC & Dubbo RPC Service 动态配置服务
Spring Cloud RESTful Service 动态 DNS 服务
服务及其元数据管理

Nacos1.0

Nacos2.0
主要关注在统一服务管理、服务共享及服务治理体系的开放的服务平台的建设上,主要包括两个方面:

二、Nacos Spring Cloud 快速开始
下载地址:https://github.com/alibaba/nacos/releases
下载完成之后,解压。根据不同平台,执行不同命令,启动单机版Nacos服务:

Windows cmd startup.cmd或者双击startup.cmd
Linux/Unix/Mac sh startup.sh -m standalone
ubuntu bash startup.sh -m standalone

Nacos访问地址:http://localhost:8848/nacos
默认账号:nacos,密码:nacos

image.png

三、构建应用接入Nacos注册中心
在完成了Nacos服务的安装和启动之后,下面我们就可以编写两个应用(服务提供者与服务消费者)来验证服务的注册与发现了。

服务提供者

1.maven创建一个Spring Boot应用,命名为:spring-cloud-nacos-provider
2.pom文件

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <!--服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <!--模版引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

3.创建NacosProviderApplication启动类

//通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
@Controller
public class NacosProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class,args);
    }

    @RequestMapping("/hello")
    public String hello(Map<String,Object> map) {
        map.put("name", "xiaoqiaobian");
        return "hello";
    }
}

4.resoures路径创建templates文件夹,添加hello.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello World!</title>
</head>
<body>
Hello World <p th:text="${name}"></p>
</body>
</html>

5.配置文件
5.1创建application.yml配置文件

#在 application.properties 中配置 Nacos server 端口号和地址:
spring:
  #thymeleaf:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8000

5.2创建bootstrap.properties配置文件

#配置Nacos server地址,Nacos管理登陆地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#配置Nacos server应用名,在Nacos后台显示
spring.application.name=xiaoqiaobian

6.启动应用程序


image.png

进到nacos管理后台页面-服务管理-服务列表


image.png
服务消费者

1、maven创建一个Spring Boot应用,命名为:spring-cloud-nacos-consumer
2、编辑pom.xml中的依赖内容,与上面服务提供者的一样即可。
3、创建NacosConsumerApplication启动类,自定义@Bean resultTemplate

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class,args);
    }

    @Bean
    //@LoadBalanced
    public RestTemplate resultTemplate(){
        RestTemplate template = new RestTemplate();
        return template;
    }
}

4.配置文件一样的,把端口号修改为9000
5.编写Controller类

@RestController
public class App {

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    LoadBalancerClient loadBalancerClient;

    //消费服务
    @RequestMapping("/test")
    public String services() {
        //通过监听器获取实例对象
        ServiceInstance serviceInstance = loadBalancerClient.choose("xiaoqiaobian");
        //获取服务提供者的url
        String url = serviceInstance.getUri() + "/hello?name=" + "xiaoqiaobian";
        //将服务提供者的返回信息进行封装
        String result = restTemplate.getForObject(url, String.class);
        System.out.println(url);
        return result;
    }
}

消费服务,访问消费者的静态页面成功


image.png
image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读