spring cloud alibaba初体验(1)

创建maven的依赖(父工程)

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
    </parent>

    <groupId>com.tonyffd</groupId>
    <artifactId>spring-cloud-study</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
        <spring.cloud.alibaba-version>2.2.5.RELEASE</spring.cloud.alibaba-version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

服务之间通信

同源策略是在浏览器中的,服务与服务之间通信没有跨域问题。
创建一个provider子工程和consumer子工程模拟服务提供和服务调用,在配置文件中添加依赖spring-boot-starter-web,使用restTemplate进行服务调用
首先需要在配置文件中配置restTemplate,或者在spring boot启动类配置也可以。

@Configuration
public class ResourceConfig {
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

provider提供接口:

	@Value("server.port") //8081,已在appliction.yml中配置
    private String port;
    @GetMapping("/provider/echo/{msg}")
    public String doRestEcho1(@PathVariable String msg){
        return port+" say hello "+msg;
    }

consumer调用接口:


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

    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/consumer/doRestEcho1")
    public String doRestEcho01(){
        String url = "http://localhost:8081/provider/echo/"+port;
        System.out.println("request url:"+url);
        return restTemplate.getForObject(url, String.class);
    }

通过调用consumer的接口localhost:8091/consumer/doRestEcho1,consumer的服务去调用provider中的服务。
结果: 8081 say hello 8091

nacos注册中心

下载nacos https://github.com/alibaba/nacos/releases( 本人下载的时1.4.1版本)
下载后解压,进入conf文件夹进行配置。

  1. nacos-mysql.sql
DROP DATABASE IF EXISTS `nacos_config`;
CREATE DATABASE `nacos_config` DEFAULT character set utf8mb4;
SET names utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `nacos_config`;
  1. mysql中导入该数据文件,生成数据文件
  2. 备份application.properties文件,防止修改后出错情况
  3. 配置application.properties文件中的数据库配置
###If use MySQL as datasource:
spring.datasource.platform=mysql

###Count of DB:
db.num=1

###Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1234
  1. 在cmd命令行中输入
startup.cmd -m standalone
  1. 在浏览器中输入地址访问nacos
http://localhost:8848/nacos

在这里插入图片描述
账号密码默认都是nacos

nacos服务发现

在刚刚创建的consumer和provider模块中,添加nacos服务发现。(两个模块都是下面配置)
pom的依赖配置

	<dependencies>
        <!--Web服务-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--服务的注册和发现(我们要讲服务注册到nacos)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

application.yml配置

server:
  port: 8081 #端口号,consumer的配置文件把port改为8091
spring:
  application:
    name: provider #应用名称,consumer的配置文件把name改为provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务发现nacos地址

重新启动两个服务后就可以在nacos的服务列表看到两个服务名称,就像淘宝的卖家和买家在淘宝平台注册一样。
在这里插入图片描述
在naocs注册后,可以更好的查找这些服务,nacos和服务之间通过心跳包机制检测服务还是否存在。可以使用restTemplate去调用服务。

nacos配置中心

在配置中心中,我们可以对项目进行动态的配置,比如数据库用户名,密码,线程池大小等信息做动态的配置。,这里只修改了provider的配置,以provider为测试对象。

  1. 在pom.xml文件中添加依赖
  <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>
  1. 把项目中原本的application.yml文件重命名为bootstrap.yml(启动优先级最高)
server:
  port: 8081 #端口号
spring:
  application:
    name: provider #应用名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务发现nacos地址
      config:
        server-addr: localhost:8848 #配置中心nacos地址
        group: DEFAULT_GROUP #配置组,默认为DEFAULT_GROUP
        file-extension: yml #动态配置文件类型
  1. 在需要动态配置信息的位置添加@RefreshScope 这个注解,当nacos控制台上发布配置时,spring中会创建新的对象覆盖原来的对象,起到动态更新的效果。
@RefreshScope//动态刷新配置
@RestController
public class ProviderController {
    @Value("${server.port}")
    private String port;

    @GetMapping("/provider/echo/{msg}")
    public String doRestEcho1(@PathVariable String msg){
        return port+" say hello "+msg;
    }
}
  1. 重新启动服务,测试结果任然为8081 say hello 8091

  2. 在nacos控制台上修改配置信息
    点击最右侧+,添加配置
    在这里插入图片描述
    在配置文件中修改provider服务的端口号为1234,dataId是服务的应用名,group是分组。配置模式中选择刚刚在bootstrap中配置的文件格式。(如果要用consumer调用,需要把调用接口的端口也修改为1234)
    在这里插入图片描述

  3. 点击发布后 再次测试,结果为 1234 say hello 8091

命名空间

点击命名空间后我们可以看到,默认会有一个public的命名空间,当然我们也可以创建自己的命名空间
在这里插入图片描述
只填最后两个就可以了,命名空间id会自动生成。
我们再次回到配置列表界面可以看到可以选择dev命名空间进行配置,这样就可以把生产场景和发布场景做分离。当然还需在项目配置文件中指定命名空间和组。

namespace: f7328185-c077-47c3-ada4-0aad40717d63 #命名空间

在这里插入图片描述
Nacos配置管理模型
Nacos 配置管理模型由三部分构成,如图所示:
在这里插入图片描述
其中:
在这里插入图片描述
Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境。
Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组。
Service/DataId:某⼀个服务或配置集,一般对应一个配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值