SpringCloud学习(10)-SpringCloudAlibaba-Nacos服务注册、配置中心

news2024/11/15 23:21:54

Spring Cloud Alibaba 参考文档

Spring Cloud Alibaba 参考文档

nacos下载Nacos 快速开始

直接进入bin包 运行cmd命令:startup.cmd -m standalone

运行成功后通过http://localhost:8848/nacos进入nacos可视化页面,账号密码默认都是nacos

Nacos服务注册:以消费90、支付9001两个服务Demo为例

maven依赖:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

配置文件application.yml

server:
  port: 9001
spring:
  application:
    name: nacos-pay-provider #以此名入驻服务注册中心
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址

启动类、服务端controller



import cn.hutool.core.util.IdUtil;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.sunxiao.cloud.entities.PayDTO;
import com.sunxiao.cloud.util.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;

/**
 * @author sun
 * @date 2024/4/1
 */
@RestController
public class PayAlibabaController {

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

    @GetMapping("/pay/nacos/{id}")
    public String getPayInfo(@PathVariable("id") Integer id) {
        return "nacos registry serverPost: " + serverPort + ", id: " + id;
    }

    // openfeign和sentinel
    @GetMapping("/pay/nacos/get/{orderNo}")
    @SentinelResource(value = "getPayByOrderNo", blockHandler = "handlerBlockHandler")
    public Result<PayDTO> getPayByOrderNo(@PathVariable("orderNo") String orderNo) {
        // 模拟查询
        PayDTO payDTO = new PayDTO(1024, orderNo, "pay" + IdUtil.simpleUUID(), 1, BigDecimal.valueOf(9.9));
        return Result.success(payDTO);
    }

    public Result<PayDTO> handlerBlockHandler(String orderNo, BlockException e) {
        return Result.fail("服务提供者" + e.getMessage());
    }
}



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

/**
 * @author sunx
 * @date 2024/4/1
 */
@SpringBootApplication
@EnableDiscoveryClient
public class Main9001 {

    public static void main(String[] args) {
        SpringApplication.run(Main9001.class, args);
    }
}

调用端Controller及RestTemplateConfig



import com.sunxiao.cloud.apis.PayFeignSentinelApi;
import com.sunxiao.cloud.config.RestTemplateConfig;
import com.sunxiao.cloud.entities.PayDTO;
import com.sunxiao.cloud.util.Result;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {

    @Resource
    private RestTemplate restTemplate;

    @Resource
    private PayFeignSentinelApi payFeignSentinelApi;

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

    @GetMapping("/order/pay/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id) {
        return restTemplate.getForObject(serverURL + "/pay/nacos/" + id, String.class);
    }

    @GetMapping("/consume/pay/nacos/get/{orderNo}")
    Result<PayDTO> getPayByOrderNo(@PathVariable("orderNo") String orderNo){
        return payFeignSentinelApi.getPayByOrderNo(orderNo);
    }

}


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;

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

复制消费服务端:

启动90、9001、9002效果:

nacos服务列表,调用时自动实现负载均衡:

发起访问请求2次:

Nacos服务配置中心
maven依赖
 <!--bootstrap bootstrap.yaml-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <!--nacos-config nacos全局配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
                <!--nacos-discovery nacos 服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

配置文件bootstrap.yml。它的优先级高于application.yml

# nacos配置
spring:
  application:
    name: nacos-config-client #以此名入驻服务注册中心
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yml #指定yaml格式的配置
        #group: PROD_GROUP              #如果设置了groupid
        #namespace: Prod_Namespace    #如果设置了namespace

        # nacos端配置文件DataId的命名规则是:
        #    nacos-config-client                  dev                      yaml      ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
        # 本案例的DataID是:nacos-config-client-dev.yaml

config:
  info: test

application.yml

server:
  port: 1234

spring:
  profiles:
    active: dev # 表示开发环境
      #active: prod # 表示生产环境
    #active: test # 表示测试环境

启动类及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;

/**
 * @author sun
 * @date 2024/4/1
 */
@RestController
@RefreshScope // 支持动态刷新功能
public class NacosConfigClientController {

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

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}



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

/**
 * @author sunx
 * @date 2024/4/1
 */
@SpringBootApplication
@EnableDiscoveryClient
public class Main1234 {
    public static void main(String[] args) {
        SpringApplication.run(Main1234.class, args);
    }
}

nacos新建配置

测试效果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全景化工厂虚拟场景VR在线编辑突破传统束缚

数字化时代来临&#xff0c;让很多行业发生了天翻地覆的变化&#xff0c;更多人和企业接纳和亲近VR/AI/3D等技术&#xff0c;虚拟仿真VR内容编辑器系统不仅在畜牧培训领域大放异彩&#xff0c;更在其他多个行业领域展现出广泛的应用前景。 相比传统的VR虚拟现实应用程序开发依赖…

如何使用开源情报跟踪一个人?在线访问网站以及使用方法介绍

如何使用开源情报跟踪一个人&#xff1f;在线访问网站以及使用方法介绍。 开源情报&#xff08;OSINT&#xff09;是一门关于收集和分析公开可用信息的独特技艺&#xff0c;它致力于构建个人或团体的详尽档案。 这一过程中&#xff0c;信息搜集者会利用多元化的信息源&#xff…

如何使用 langchain 与 openAI 连接

上一篇写了如何安装 langchain https://www.cnblogs.com/hailexuexi/p/18087602 这里主要说一个 langchain的使用 创建一个目录 langchain &#xff0c;在这个目录下创建两个文件 main.py 这段python代码&#xff0c;用到了openAI&#xff0c;需要openAI及FQ。这里只做…

【NLP】隐马尔可夫(HMM)与条件随机场(CRF)简介

一. HMM 隐马尔可夫模型&#xff08;Hidden Markov Model, HMM&#xff09;是一种用于处理含有隐藏状态的序列数据的统计学习模型。通过建模隐藏状态之间的转移关系以及隐藏状态与观测数据的生成关系&#xff0c;HMM能够在仅观察到部分信息的情况下进行状态推理、概率计算、序…

Spring Security——06,授权_封装权限信息

授权_封装权限信息 一、权限系统的作用二、授权基本流程三、限制访问资源所需权限四、封装权限信息4.1 权限信息封装到LoginUser4.2 LoginUser 添加权限4.3 过滤器封装权限信息 五、断点测试5.1 有权限的访问5.2 没有权限的访问 一键三连有没有捏~~ 一、权限系统的作用 例如一…

数据结构(3)----栈和队列

目录 一.栈 1.栈的基本概念 2.栈的基本操作 3.顺序栈的实现 •顺序栈的定义 •顺序栈的初始化 •进栈操作 •出栈操作 •读栈顶元素操作 •若使用另一种方式: 4.链栈的实现 •链栈的进栈操作 •链栈的出栈操作 •读栈顶元素 二.队列 1.队列的基本概念 2.队列的基…

物联网实战--驱动篇之(三)LoRa(sx1278)

目录 一、LoRa简介 二、sx1278模块 三、硬件抽象层 四、SX1278初始化 五、发送时间计算 六、发送模式 七、接收模式 八、总结 一、LoRa简介 LoRa在物联网传输领域有着举足轻重的地位&#xff0c;平时大家可能比较少听说&#xff0c;因为它主要还是在行业应用&#xff0…

精心整理-数据分类分级赋能企业数据安全建设资料合集

以下是资料目录&#xff0c;如需下载请前往知识星球下载&#xff1a;https://t.zsxq.com/18KTZnJMX 企业数据安全建设数据分类分级架构.pdf 企业数据分类分级模板.xls 数据分类分级的实践与挑战.pdf 数据分类分级制度评述.pdf 电信和互联网大数据安全管控分类分级实施指南.pdf …

嵌入式学习49-单片机2

指令周期 1M 机器周期 12M &#xff08;晶体震荡器产生&#xff09; 中断两种方式 …

STL--list和vector有什么区别

list 和 vector 是 C STL 中的两种常见容器&#xff0c;它们在底层实现、性能特性和适用场景方面有着显著的区别&#xff1a; 底层数据结构&#xff1a; vector 底层是一个动态数组&#xff0c;提供快速的随机访问&#xff0c;但在中间插入或删除元素效率较低。 list 是一个双…

鸿蒙ArkUI实例:【自定义组件】

组件是 OpenHarmony 页面最小显示单元&#xff0c;一个页面可由多个组件组合而成&#xff0c;也可只由一个组件组合而成&#xff0c;这些组件可以是ArkUI开发框架自带系统组件&#xff0c;比如 Text 、 Button 等&#xff0c;也可以是自定义组件&#xff0c;本节笔者简单介绍一…

ERC314协议代币开发及合约开发详解

ERC314 是一种新的代币标准&#xff0c;旨在为 BASE 链上的代币提供更便捷、高效的交易体验。它由 DAPJ 项目团队开发&#xff0c;并于 2023 年 8 月首次发布。 ERC314 的特点 无需依赖 DEX 或 SWAP 进行交易: ERC314 代币可以像原生代币一样直接转账&#xff0c;无需借助 DEX …

Lightroom Classic 2024成就专业摄影梦想mac/win版

Lightroom Classic 2024是一款功能强大的数字图像处理和管理工具&#xff0c;专为摄影师和摄影爱好者设计。它提供了丰富的照片调整、处理、管理和分享功能&#xff0c;帮助用户轻松管理、编辑和展示他们的照片。 Lightroom Classic 2024软件获取 首先&#xff0c;Lightroom C…

Vector Laboratories的凝集素--莲藕凝集素(Lotus Tetragonolobus Lectin)

莲藕凝集素&#xff08;lotustetragonolobus lectin&#xff09;是一个密切相关的糖蛋白家族&#xff0c;对含α-linked L-fucose具有相似的特异性。虽然莲藕凝集素的许多结合特性与荆豆凝集素I相似&#xff0c;但这些岩藻糖特异性凝集素之间的结合亲和力和某些寡糖特异性明显不…

【小白学机器学习11】假设检验之2:Z检验(U检验,正态检验)

目录 1 什么是Z检验 1.1 Z检验的别名 Z-test /U-test / 正态检验 1.2 维基百科定义 1.2 百度百科定义 1.3 定义提炼关键点 1.4 Z检验量 : Z(X-θ)/s (X-u)/s 2 Z检验量的构造 2.1 Z检验量 : Z(X_-u)/s 2.2 Z检验变量的构造 2.4 Z检验量的核心参数 2.4.1 原始公式 …

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生&#xff0c;理论滚瓜烂熟&#xff0c;八股天花乱坠&#xff0c;但是大家有多少在代码中实践过呢&#xff1f;很多人在实际开发中可能就用用Async&#xff0c;new Thread()。线程池也很少有人会自己去建&#xff0c;默认的随便用用。在工作中大家对…

数据库表设计18条黄金规则

前言 对于后端开发同学来说&#xff0c;访问数据库&#xff0c;是代码中必不可少的一个环节。 系统中收集到用户的核心数据&#xff0c;为了安全性&#xff0c;我们一般会存储到数据库&#xff0c;比如&#xff1a;mysql&#xff0c;oracle等。 后端开发的日常工作&#xff…

基于ARM内核的智能手环(day8)

心率模块 输入模拟量 MPU6050 IIC 接线引脚&#xff1a; 因为这两个模块官方都提供了详细的资料和源码&#xff0c;这里不再过多赘述 项目结果展示 待机页面 有开场动画 所有页面无操作20s自动返回待机页面 主页 展示时间和温度到达预定时间蜂鸣器响起&#xff0c;按键后关…

损失函数L1Loss、L2loss区别

损失函数 L1Loss 平均绝对误差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09; 预测值和真实值之差的绝对值 L2Loss 均方误差&#xff08;Mean Square Error&#xff0c;MSE&#xff09; 是预测值和真实值之差的平方 Smooth L1 Loss/Huber Loss 平滑版本的…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--php数组与基本循环

php数组与基本循环 <?php$myName"xixi";$namesarray(xixi1,xixi2,xixi3); ?> <p> Hi ,my name is <?php echo $myName; ?> </p> <p> Hi,my name is <?php echo $names[0] ?> </p> <p> Hi,my name is <?…