SpringCloudAlibaba系列之Nacos实战

目录

注意事项

参考资源

Nacos配置中心

初始化项目

进行Nacos相关配置

运行

Nacos注册中心

dubbo方式

对外暴露接口dubbo-api

服务提供者dubbo-provider

服务消费者dubbo-consumer

负载均衡客户端方法

服务提供者

服务消费者


注意事项

不管是使用Nacos配置中心,还是使用Nacos注册中心,大家一定要注意SpringCloudAlibaba和SpringBoot的版本对应关系,以免实际开发过程中出现各种莫名其妙的问题。下图供大家参考(非最新的对应关系)

参考资源

Nacos环境准备参考官网链接:Nacos 快速开始 | Nacos 

Nacos配置中心和注册中心底层原理实现分析可参考如下链接:

SpringCloudAlibaba系列之Nacos配置管理

SpringCloudAlibaba系列之Nacos服务注册与发现

示例代码源码参考地址:https://gitee.com/williamjava/spring_cloud_alibaba_practise 

Nacos配置中心

初始化项目

  • 核心maven依赖
<dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<dependencyManagement>
       <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • 增加项目中配置文件yml
spring:
  application:
    name: alibaba-nacos-config-client
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

server:
  port: 8604
  •  创建测试Controller
package com.gui.alibaba.nacos.config.controller;

import lombok.extern.slf4j.Slf4j;
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;

/**
 * 注解:RefreshScope
 * 主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效
 */
@Slf4j
@RestController
@RefreshScope
public class TestController {

    @Value("${practise.title:本地默认内容}")
    private String title;

    @GetMapping("/test")
    public String hello() {
        return title;
    }
}

进行Nacos相关配置

Nacos控制台增加配置文件,配置文件名称(Data ID)与spring.application.name保持一致,具体内容如下:

运行

启动项目,浏览器访问:http://localhost:8604/test

我们得到了配置中心中配置的内容,如果Nacos控制台直接修改配置的内容,刷新页面能实时获取到最新的数据,起关键作用的是@RefreshScope注解,可动态刷新Nacos配置。 

Nacos注册中心

dubbo方式

对外暴露接口dubbo-api
package com.sc.ali.dubbo.api;

public interface HelloService {
    String hello(String name);
}
服务提供者dubbo-provider
  • 核心maven依赖
<!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <!-- Spring Cloud Nacos Service Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

<!--API-->
        <dependency>
            <groupId>com.ali.sc.dubbo.api</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  •  项目中配置文件yml
spring:
  application:
    name: dubbo-provider
  cloud:
    nacos:
      discovery:
        #nacos配置中心地址
        server-addr: localhost:8848
  main:
    allow-bean-definition-overriding: true


server:
  port: 8090
dubbo:
  scan:
    #dubbo扫描包路径
    base-packages: com.sc.ali.dubbo.provider.service
  protocol:
    name: dubbo
    port: -1
  registry:
    address: spring-cloud://localhost
  • 服务实现类
package com.sc.ali.dubbo.provider.service;

import com.sc.ali.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.Service;

@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String hello(String s) {
        return "Hello, " + s + ",welcome....";
    }
}
  •  启动服务提供者

Nacos工作台服务列表中可看到服务提供者对应的服务。

服务消费者dubbo-consumer
  • 核心maven依赖
<!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <!-- Spring Cloud Nacos Service Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

<!--API-->
        <dependency>
            <groupId>com.ali.sc.dubbo.api</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • 项目中配置文件yml
spring:
  application:
    name: dubbo-consumer
  cloud:
    nacos:
      discovery:
        #Nacos服务注册中心地址
        server-addr: localhost:8848
  main:
    allow-bean-definition-overriding: true


server:
  port: 8091
dubbo:
  protocol:
    name: dubbo
    port: -1
  registry:
    address: spring-cloud://localhost
  cloud:
    #指定需要订阅的服务
    subscribed-services: dubbo-provider
  • 添加测试controller,完成服务调用
package com.sc.ali.dubbo.consumer.controller;

import com.sc.ali.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController{
    @Reference
    private HelloService helloService;

    @GetMapping("/hello")
    public String hello(String name) {
        return helloService.hello(name);
    }
}
  •  运行输出结果

负载均衡客户端方法

服务提供者
  • 核心maven依赖
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • 项目中配置文件yml
spring:
  application:
    name: alibaba-nacos-discovery-server
  cloud:
    nacos:
      #Nacos注册中心地址
      server-addr: localhost:8848

server:
  port: 8601
  •  对外暴露的服务方法
package com.gui.alibaba.nacos.discovery.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {
    @GetMapping("/hello")
    public String hello(@RequestParam String name) {
        log.info("invoked name = " + name);
        return "hello " + name;
    }
}
  • 启动服务提供者

Nacos工作台服务列表可找到对应的服务

服务消费者
  • 核心maven依赖
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • 项目中配置文件yml
spring:
  application:
    name: alibaba-nacos-discovery-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

server:
  port: 8602
  •  添加测试controller,完成服务调用
package com.gui.alibaba.nacos.client.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@Slf4j
public class TestController {
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @GetMapping("/test")
    public String test() {
        // 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
        ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
        //构造请求URL
        String url = serviceInstance.getUri() + "/hello?name=" + "william";

        //创建RestTemplate对象,通过Restful接口调用具体服务
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(url, String.class);

        return "Invoke : " + url + ", return : " + result;
    }
}
  • 运行输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/347088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序员手把手教你参与开源!拿捏!

一、前言 有一些同学提问&#xff0c;希望在自己的简历上增加一些有含金量的项目经历&#xff0c;最好能够去参与一些开源项目的开发&#xff0c;但由于对一个庞大的开源项目缺乏认知&#xff0c;难以着手。同时也担心自己能力不足&#xff0c;不知道自己写的代码是否会被接纳。…

MATLAB环境下一种音频降噪优化方法—基于时频正则化重叠群收缩

语音增强是语音信号处理领域中的一个重大分支&#xff0c;这一分支已经得到国内外学者的广泛研究。当今时代&#xff0c;随着近六十年来的不断发展&#xff0c;己经产生了许多有效的语音增强算法。根据语音增强过程中是否利用语音和噪声的先验信息&#xff0c;语音增强算法一般…

文件备份管理软件系统

1、我解决的问题 避免因为硬盘故障&#xff0c;导致数据丢失; 避免因为中了病毒&#xff0c;文件被加密&#xff0c;无法取回; 避免了员工恶意删除文件; 规范企业内部的文件管理&#xff0c;使它井井有条; 防范于未然&#xff0c;不必再为可能的风险担忧; 2、我的优点 我支持定…

语义分割 | 基于 VGG16 预训练网络和 Segnet 架构实现迁移学习

Hi&#xff0c;大家好&#xff0c;我是源于花海。本文主要使用数据标注工具 Labelme 对猫&#xff08;cat&#xff09;和狗&#xff08;dog&#xff09;这两种训练样本进行标注&#xff0c;使用预训练模型 VGG16 作为卷积基&#xff0c;并在其之上添加了全连接层。基于标注样本…

什么是调频直放站,调频直放站的功能和作用是什么?

调频直放站&#xff0c;顾名思义是一种对调频广播信号进行放大处理的通信设备&#xff0c;将调频广播信号引入到地下空间或隧道内&#xff0c;实现调频广播信号覆盖&#xff0c;扩大调频广播信号的覆盖范围。 1、调频直放站的组成 调频直放站从结构上来讲&#xff0c;一般由远…

线性代数:矩阵的定义

目录 一、定义 二、方阵 三、对角阵 四、单位阵 五、数量阵 六、行&#xff08;列&#xff09;矩阵 七、同型矩阵 八、矩阵相等 九、零矩阵 十、方阵的行列式 一、定义 二、方阵 三、对角阵 四、单位阵 五、数量阵 六、行&#xff08;列&#xff09;矩阵 七、同型矩…

python数据和分析——pandas基础内容

Pandas 的两个主要的数据结构是 Series 和 DataFrame&#xff1a; Series 是一维标记数组&#xff0c;类似于带有标签的列表。它可以包含不同类型的数据&#xff0c;并且可以通过索引进行访问和操作。DataFrame 是二维表格型数据结构&#xff0c;类似于 SQL 表或 Excel 电子表…

jQuery遍历(树遍历)

1、.children&#xff08;&#xff09;: 获得匹配元素集合中每个元素的直接子元素&#xff0c;选择器选择性筛选。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"jQuery.js"&g…

go api(get post传参,数据库,redis) 测试

介绍&#xff1a;分别测试get请求&#xff0c;post请求&#xff0c;请求链接数据库&#xff0c;以及redis操作。 1.api代码 package mainimport (_ "database/sql""encoding/json""github.com/gin-gonic/gin""go-test/com.zs/database&quo…

橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式

前面我们说了mybatis的缓存设计体系&#xff0c;这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的&#xff0c;Mybatis中存在两级缓存。分别是一级缓存(会话级)&#xff0c;和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…

自动化网络故障管理

故障管理是网络管理的组成部分&#xff0c;涉及检测、隔离和解决问题&#xff0c;如果实施得当&#xff0c;网络故障管理可以使连接、应用程序和服务保持在最佳水平&#xff0c;提供容错能力并最大限度地减少停机时间&#xff0c;专门为此目的设计的平台或工具称为故障管理系统…

UDS Flash刷写用例简单介绍

文章目录 1.Boot的功能1.1 目的1.2 功能 2.测试用例设计2.1 设计框架2.2 正向测试2.1.1 刷写流程2.1.2 重复刷写2.1.3压力刷写 2.3 逆向测试2.2.1 断电后刷写2.2.2 中断通讯后刷写2.2.3 篡改刷写数据2.2.4 修改软件校验数据2.2.5 修改刷写流程2.2.6 高负载刷写2.2.7 高低压刷写…

C++数据结构——红黑树

一&#xff0c;关于红黑树 红黑树也是一种平衡二叉搜索树&#xff0c;但在每个节点上增加一个存储位表示节点的颜色&#xff0c;颜色右两种&#xff0c;红与黑&#xff0c;因此也称为红黑树。 通过对任意一条从根到叶子的路径上各个节点着色方式的限制&#xff0c;红黑树可以…

ChatGLM论文解读

GLM GLM: General Language Model Pretraining with Autoregressive Blank Infilling 论文地址 1. 背景介绍 1)主流预训练框架 模型介绍结构特点训练目标autoregressive自回归模型,代表GPT,本质上是一个从左到右的语言模型,常用于无条件生成任务(unconditional generat…

[BJDCTF2020]ZJCTF,不过如此(特详解)

php特性 1.先看代码&#xff0c;提示了next.php&#xff0c;绕过题目的要求去回显next.php 2.可以看到要求存在text内容而且text内容强等于后面的字符串&#xff0c;而且先通过这个if才能执行下面的file参数。 3.看到用的是file_get_contents()函数打开text。想到用data://协…

Airflow【部署 01】Airflow官网Quick Start实操(一篇学会部署Airflow)

Airflow官网Quick Start实操 1.环境变量设置2.使用约束文件进行安装3.启动单机版3.1 快速启动3.2 分步骤启动3.3 启动后3.4 服务启动停止脚本 4.访问4.1 登录4.2 测试 来自官网的介绍&#xff1a; https://airflow.apache.org/ Airflow™是一个由社区创建的平台&#xff0c;以…

【Unity学习笔记】第十一 · 动画基础(Animation、状态机、root motion、bake into pose、blendTree、大量案例)

转载引用请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132081959 作者&#xff1a;CSDN|Ringleader| 如果本文对你有帮助&#xff0c;不妨点赞收藏关注一下&#xff0c;你的鼓励是我前进最大的动力&#xff01;ヾ(≧▽≦*)o 主…

SSL证书 DV、OV、EV等级的证书适用群体

DV&#xff08;Domain Validation&#xff0c;域名验证&#xff09;证书 特点&#xff1a;DV证书是最基础的SSL/TLS证书类型&#xff0c;仅验证申请证书的实体是否对该域名有控制权。验证过程相对简单快速&#xff0c;通常只需要验证域名的所有权即可。 适用人群&#xff1a;…

教学方法有哪些种类

作为一位老师&#xff0c;面对不同的学生和课程&#xff0c;掌握多种教学方法是必不可少的。你知道吗&#xff1f;教学方法不仅关乎教学效果&#xff0c;还直接影响学生的学习热情和兴趣。这篇文章将为你揭秘教学方法的神秘面纱&#xff0c;看看有哪些种类的教学方法&#xff0…

初识计算机网络 | 计算机网络的发展 | 协议初识

1.计算机网络的发展 “矛盾是普遍存在的&#xff0c;矛盾是事物联系的实质内容和事物发展的根本动力&#xff01;” 计算机在诞生之初&#xff0c;在军事上用来计算导弹的弹道轨迹&#xff01;在发展的过程中&#xff08;商业的推动&#xff0c;国家政策推动&#xff09;&…