spring cloud alibaba微服务架构 pdf springcloud alibaba搭建微服务_springcloud微服务

架构模式

SpringCloudAlibaba+Nacos

简单说一下选型原因

我们知道有一套微服务叫做Dubbo+Zookeeper,Dubbo是阿里的,但是后来阿里停止了对Dubbo的维护,并把Dubbo共享给了Apache,在这个节骨眼上,SpringCloud趁虚而入,于是,在微服务的领域火了起来,他的一套架构是Netflix公司的支持,包括Eureka注册中心等,但是后来Eureka停止了更新,同时在这个节骨眼上,SpringCloudAlibaba站了出来,用自己的Nacos做注册中心,于时他就火了,当然,从名字就可以看出来,他算是SpringCloud体系的一个,在Spring官网可以直接找到,反正不管怎么滴吧,现在SpringCloudAlibaba+Nacos挺厉害的,在此背景下,我决定了自己搭建一个简单的微服务,网上找了一些,不太满意,死磕官网,得此文章!

安装Nacos

  • 安装Nacos其实很简单,只需去GitHub下载他的压缩包即可https://github.com/alibaba/nacos/releases,这是releases版本的链接,下载完毕之后,解压,在bin目录下运行通过startup.cmd -m standalone进行启动单体模式(不加 -m standalone启动的是集群)
    当你运行之后,会看到如下界面
  • spring cloud alibaba微服务架构 pdf springcloud alibaba搭建微服务_springcloud搭建_02

  • 然后通过上面的URL可以看到可视化界面,账号和密码都是nacos
    登录之后是如下界面
  • spring cloud alibaba微服务架构 pdf springcloud alibaba搭建微服务_springcloud 搭建_03

  • 至此,Nacos安装完毕,下面开始搭建微服务,并把每个服务注册到该注册中心(Nacos不仅仅是注册中心,还是配置中心,上图可以看到有配置管理)

搭建微服务
这里通过搭建两个服务,一个是nacos-provider另一个是nacos-consumer

首先创建一个springboot项目(如何创建就不细说了)
然后引入spring-cloud-starter-alibaba-nacos-discovery服务发现依赖

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

然后在主启动类上加上@EnableDiscoveryClient注解
然后需要一个配置(这里给出yaml配置)

server:
  port: 8080
spring:
  application:
    name: nacos-provider #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos注册中心地址

然后就可以写一个业务接口了,即controller

@RestController
public class ProviderController {
    @GetMapping(value = "/info")
    public String getInfo() {
        return "hello world";
    }
}

启动服务,即可注册到Nacos

spring cloud alibaba微服务架构 pdf springcloud alibaba搭建微服务_springcloud 搭建_04


接下来再注册一个服务,名字叫nacos-consumer

一样的,创建一个springboot项目,引入依赖

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

主启动类上加上@EnableDiscoveryClient注解
书写配置

server:
  port: 8081
spring:
  application:
    name: nacos-provider #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos注册中心地址

写一个接口,来调用provider服务

@RestControllerpublic class ConsumerController {    @Autowired
private LoadBalancerClient loadBalancerClient;    @Autowired
private RestTemplate restTemplate;    /**
     * 调用springcloud-provide的/config/info接口
     * @return
     */
    @GetMapping("/echo/info")    public String echoConfigInfo(){        //Access through the combination of LoadBalanceClient and RestTemplate
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
        String path = String.format("http://%s:%s/info",serviceInstance.getHost(),serviceInstance.getPort());
        System.out.println("request path:" +path);        return restTemplate.getForObject(path,String.class);
    }    //Instantiate RestTemplate Instance
    @Bean
public RestTemplate restTemplate(){        return new RestTemplate();
    }
}

然后启动服务,即可注册

spring cloud alibaba微服务架构 pdf springcloud alibaba搭建微服务_springcloud 搭建_05


好了,两个服务都成功注册了,然后,通过上面的controller可以进行调用了,这里说明一下,上面用到了两个API,LoadBalancerClientRestTemplate,算是微服务调用的核心吧

spring cloud alibaba微服务架构 pdf springcloud alibaba搭建微服务_springcloud 搭建_06


可以看到,通过调用consumer服务的/echo/info接口,可以访问到provider服务的/info接口,至此结束!