首页 > 编程语言 > 详细

Spring Cloud alibaba

时间:2020-05-03 20:31:57      阅读:77      评论:0      收藏:0      [点我收藏+]

1.简介

Spring Cloud进入了维护模式。Spring Cloud alibaba对Spring Cloud做了封装,使用起来更简单。包含的功能有服务限流降级、服务注册于发现、分布式配置管理、消息驱动能力、阿里云对象存储、分布式任务调度等。

参考文档:

https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

源代码:https://github.com/zhongyushi-git/spring-cloud-alibaba-demo.git

2.Nacos

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。是注册中心与配置中心的组合。

官网:https://nacos.io/zh-cn/index.html

2.1下载

windows系统:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
Linux系统:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz

2.2安装

2.2.1windows系统

下载压缩包后解压即可使用。进入bin目录,双击startup.cmd看到下图说明运行成功。访问http://localhost:8848/nacos,登录用户名和密码都是nacos。

技术分享图片

 登录之后的页面如下,可以看到相关想信息。

技术分享图片

2.2.2Linux系统

把下载好的压缩包复制到linux后解压,解压之后可直接进行后续nacos的集群配置

tar -zxvf nacos-server-1.1.4.tar.gz -C /usr/local

2.3nacos服务注册

2.3.1项目搭建

创建创建maven的父工程spring-cloud-alibaba-demo,导入依赖

技术分享图片
<!--统一管理jar包版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>
    <!--  依赖管理,父工程锁定版本-->
    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
View Code

2.3.2服务提供者(集群)注册

1)创建服务提供者子模块cloud-alibaba-provider8001,导入依赖

技术分享图片
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
View Code

2)yml配置

技术分享图片
server:
  port: 8001

spring:
  application:
    name: cloud-alibaba-nacos-provider
  cloud:
    #配置nacos的服务地址
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

management:
  endpoints:
    web:
      exposure:
        include: "*"
View Code

3)创建启动类

技术分享图片
package com.zys.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

4)创建controller接口

技术分享图片
package com.zys.cloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/user/get")
    public String get() {
        return "provider port is :" + port;
    }
}
View Code

9)创建服务提供者子模块cloud-alibaba-provider8002,方式同8001,只是端口号不同。

2.3.3服务消费者注册

1)创建服务消费者子模块cloud-alibaba-consumer80,导入依赖

技术分享图片
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
View Code

2)yml配置

技术分享图片
server:
  port: 80

spring:
  application:
    name: cloud-alibaba-nacos-consumer
  cloud:
    #配置nacos的服务地址
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

#消费者要访问的微服务名称
service-url:
  nacos-user-service: http://cloud-alibaba-nacos-provider
View Code

3)创建启动类

技术分享图片
package com.zys.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

4)创建config配置类

技术分享图片
package com.zys.cloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

//相当于spring中的applicationContext.xml
@Configuration
public class ConfigBean {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
View Code

5)创建controller接口

技术分享图片
package com.zys.cloud.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/consumer")
public class UserController {

    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @Autowired
    private RestTemplate restTemplate;


    @GetMapping("/get")
    public String get(){
        return restTemplate.getForObject(serverUrl+"/user/get",String.class);
    }


}
View Code

2.3.4测试

先启动nacos,然后8001和8002,最后80,可以在nacos页面的服务列表中看到两个注册的服务。

技术分享图片

访问http://localhost/consumer/get,看到是8001和8002进行轮询负载的。是因为nacos默认支持负载均衡,原因是它默认引入了ribbon。

注册中心对比:主要是nacos,它支持AP和CP,是可以进行切换的。

2.4nacos服务配置

2.4.1基本配置

1)创建配置的客户端子模块cloud-alibaba-config-client3344,导入依赖

2)yml配置

技术分享图片
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml  #指定yaml格式的配置
bootstrap.yml
技术分享图片
spring:
  profiles:
    active: dev #开发环境
application.yml

3)创建启动类

技术分享图片
package com.zys.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

4)创建controller接口

技术分享图片
package com.zys.cloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
//动态刷新
@RefreshScope
public class UserController {

    @Value("${config.info}")
    private String info;

    @GetMapping("/config/get")
    public String get() {
        return "The config info is :" + info;
    }
}
View Code

5)创建统一的配置文件

在创建之前,先了解一些dataID的命名规则,它的完整格式为${prefix}-${spring.profile.active}.${file-extension}。

prefix :默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profile.active :即为当前环境对应的 profile。
file-exetension: 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

假如spring.application.name=nacos-config-client,环境为dev,后缀名是yaml,那么dataID就是nacos-config-client-dev.yaml。

了解了之后,就在nacos的页面新建一个配置文件,然后发布。

技术分享图片

 6)测试

启动3344,访问http://localhost:3344/config/get,可以看到配置的信息。然后修改上一步的config.info内容,再刷新页面,发现配置信息也更新了。

2.4.2分类配置

1)dataId方案

在nacos页面再创建一个配置文件,作为测试环境配置

技术分享图片

修改3344的application.yml的环境为test。

技术分享图片

重启后访问http://localhost:3344/config/get,可以看到test环境的配置信息。

2)Group方案

在dataId方案中,并没有去指定Group,而是采用的默认的名称DEFAULT_GROUP,如果需要自定义分组名称,直接改就是了,不过需要在bootstrap.yml在指定组名。

新建一个配置文件,分组名为GROUP_TEST

技术分享图片

修改3344的application.yml的环境为info,然后指定组名

技术分享图片

 重启后访问http://localhost:3344/config/get,可以看到info环境的配置信息。

3)namespace方案

用于区分不同的部署环境,实现隔离。命名空间是最大的,需要设置的话就创建命名空间,在配置文件中指定创建的命名空间的id即可。

2.5Nacos集群

在搭建集群之前,默认在linux已安装完成nocas。另外,nginx单机版也在linux搭建完成,mysql在linux已安装完成。

2.5.1nacos持久化配置

nacos默认自带的是嵌入式数据库derby,持久化就需要切换到mysql。

切换步骤如下:

1)执行sql脚本

sql的脚本是nacos-server-1.1.4\nacos\conf\nacos-mysql.sql,先创建一个名为nacos_config的数据库,然后执行这个脚本即可。

2)修改配置文件

打开nacos-server-1.1.4\nacos\conf\application.properties,在最后添加

技术分享图片
#增加支持mysql数据源配置
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
View Code

3)启动测试

重启nacos,发现之前配置的信息没有了,原因是mysql中并没有进行配置。这时在nacos页面创建一个名为nacos-config-client-info.yaml的配置文件如下:

技术分享图片

 启动3344,访问http://localhost:3344/config/get,可以看到info环境的配置信息。

2.5.2nacos集群配置

1)执行sql脚本(同上)

2)修改application.properties文件

技术分享图片
#增加支持mysql数据源配置
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=zys123456
View Code

3)获取本机的ip

hostname -i

4)配置cluster.conf

技术分享图片
cp cluster.conf.example cluster.conf
vim cluster.conf
View Code

把内容修改如下:

技术分享图片
172.16.68.248:8849
172.16.68.248:8850
172.16.68.248:8851
View Code

需要注意的是,这里的ip必须是上一步获取的本机ip。

5)修改startup.sh启动文件

vim startup.sh

修改的文件前后对比

技术分享图片技术分享图片

 技术分享图片  技术分享图片

 6)启动集群

技术分享图片
./startup.sh -p 8849
./startup.sh -p 8850
./startup.sh -p 8851
View Code

.nacos无法启动,java_home问题

Spring Cloud alibaba

原文:https://www.cnblogs.com/zys2019/p/12682628.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!