微服务eureka和nacos

news2024/12/24 8:16:59

服务远程调用

/**
     * 创建RestTemplate并注入Spring容器
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
@Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起HTTP请求,查询用户
        // 2.1.url路径
        String url="http://localhost:8081/user/"+order.getUserId();
        // 2.2.发送HTTP请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到order对象
        order.setUser(user);
        // 4.返回
        return order;
    }

搭建eureka服务 

第一步:注入依赖 

<dependency>
            <!--eureka服务端-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifact
</dependency>

第二步:使用@EnableEurekaServer 

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

第三步:application.yml文件

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

解释说明: eureka-server自己也是个微服务,也需要服务名称,而且还需要配置eureka的地址(疑问:我自己就是eureka,为什么还要配置地址信息)刚才说了eureka-server自己就是微服务,所以eureka-server在启动的时候自己也注册到eureka上(这是为了将来eureka集群之间通信去用的,比方说我启动2个或3个eureka,将来3个eureka之间会互相做注册,那么这样他们就可以做数据交流)上面defaultZone配置的是eureka集群的地址,有多个的话用逗号隔开,因为这里是单机,所以配置的只有自己(重点来了:这里的服务名称和地址信息都是做服务的注册)

服务注册

第一步:项目user-service引入依赖

<!--eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

第二步:配置application.yml文件 

spring:
  application:
    name: userservice # eureka的服务名称
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

idea创建多个实例,可以在UserApplication右击出现copy Configuration弹出窗口,环境配置端口点击应用就行了

服务发现(服务注册基础上添加额外2个步骤)

第一步:在RestTemplate上添加@LoadBalanced注解

/**
     * 创建RestTemplate并注入Spring容器
     * @return
     */
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

第二步:使用服务名称来代替原来的ip和端口

@Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起HTTP请求,查询用户
        // 2.1.url路径
        // String url="http://localhost:8081/user/"+order.getUserId();
        String url="http://userservice/user/"+order.getUserId();
        // 2.2.发送HTTP请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到order对象
        order.setUser(user);
        // 4.返回
        return order;
    }

负载均衡

一:代码方式:在order-service中的OrderApplication类中,定义一个新的IRule(全局生效) 

@Bean
    public IRule randomRule(){
        return new RandomRule();
    }

二:配置文件方式(局部生效)

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

饥饿加载 

Ribbon默认采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长,而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置饥饿加载

ribbon:
  eager-load:
    enabled: true  # 开启饥饿加载
    clients:  # 指定饥饿加载的服务名称 这是一个集合
      - userservice

Nacos启动命令

-m参数含义是模式model standalone含义是单机启动 

startup.cmd -m standalone

服务注册到Nacos

第一步:在cloud-demo父工程中添加spring-cloud-alibaba的管理依赖

<!--nacos的管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

第二步:注释掉order-service和user-service中pom.xml文件原有的eureka依赖

第三步:添加nacos的客户端依赖

<!--nacos客户端依赖包-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

第四步:修改user-service和order-service中的application.yml文件,注释eureka地址,添加nacos地址

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 服务端地址

第五步:启动OrderApplication、UserApplication1、UserApplication2并测试

nacos服务分级存储模型

服务跨集群调用问题

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,本地集群不可访问时,再去访问其它集群

服务集群属性

修改application.yml,添加以下内容

spring:
  cloud:
    nacos:
    server-addr: localhost:8848 # nacos 服务端地址
    discovery:
      cluster-name: HZ # 配置集群名称,也就是机房位置 HZ杭州 SH上海

一旦停掉本地集群的服务,就会发生跨集群调用,出现警告信息,方便运维人员知道

A cross-cluster call occurs,name = userservice, clusterName = HZ, instance = [Instance{instanceId='192.168.31.69#8083#SH#DEFAULT_GROUP@@userservice', ip='192.168.31.69', port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}]

根据权重负载均衡

编辑修改权重

环境隔离

新建命名空间

新增成功会生成一个UUID,需要去idea配置application.yml

spring:
  cloud:
    nacos:
    server-addr: localhost:8848 # nacos 服务端地址
    discovery:
      cluster-name: HZ # 配置集群名称,也就是机房位置 HZ杭州 SH上海
      namespace: a0c14ea6-b75e-4a73-beb5-94e5f496a744 # dev 开发环境

 

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

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

相关文章

关于调试别人的bug中发现的细节问题1:Switch...case...分支,永远只选择第一个分支

1、Switch…case…分支&#xff0c;永远只选择第一个分支&#xff1a; 原因&#xff1a;switch()里面的不是传入的变量&#xff0c;m_curWindowType是个成员变量&#xff0c;一直是初始值。他喵的&#xff0c;不知道谁写的下面的代码&#xff0c;大晚上的我也没有细看&#xff…

13.3寸_Wifi标签功耗电流计算-单面屏幕-1.8V的Flash测试

13.3寸Wifi标签不工作的时候电流的消耗主要来自两部分&#xff1a; 待机时&#xff0c;醒来监听时。经过测量&#xff0c;13.3寸Wifi标签的待机电流是7.13uA , 醒来监听的峰值电流是51.6 mA。13.3寸Wifi标签系统设定每间隔1秒醒来一次监听是否有唤醒数据。充电锂电池电池的容量…

00后跳槽到我们公司拿了25K,“躺平”两个字骗了我好久···

都说00后已经躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。前段时间我们部门就来了个00后&#xff0c;工作都还没两年&#xff0c;跳到我们公司起薪25K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。最近和他…

【配置环境】Windows下C/C++第三方库管理工具vcpkg安装和使用

一&#xff0c;vcpkg简介 vcpkg是微软公司开发的一个开源C包管理工具&#xff0c;它可以很方便的帮助您在 Windows、 Linux 和 MacOS 上下载&#xff0c;编译和安装C 第三方库。它具有自动解决依赖关系的能力&#xff0c;并且支持多种目标架构和平台。提供了超过1500个C库的预…

架构师基础篇之如何画架构图C4模型

1. 前言 本文将给大家介绍一种简洁明了软件架构可视化模型——C4模型&#xff0c;并手把手教大家如何使用代码绘制出精美的C4架构图。 阅读本文之后&#xff0c;读者画的架构图将会是这样的&#xff1a; 注&#xff1a;该图例仅作绘图示例使用&#xff0c;不确保其完整性、可…

❤ 关于以太网没有有效的ip配置问题解决方法

❤ 关于以太网没有有效的ip配置问题解决方法 错误提示 解决方法 一&#xff0c;检查IP地址是否为自动获取 1&#xff0c;首先右键任务栏右下角的网络图标点击进入"网络和共享中心",然后点击"更改适配器设置"。 2&#xff0c;在适配器界面右键"本…

异常数据检测 | Python实现孤立森林(IsolationForest)异常数据检测

文章目录 文章概述模型描述源码分享学习小结文章概述 异常数据检测 | Python实现孤立森林(IsolationForest)异常数据检测 模型描述 IsolationFores算法它是一种集成算法(类似于随机森林)主要用于挖掘异常(Anomaly)数据,或者说离群点挖掘,总之是在一大堆数据中,找出与其它数据…

***杨辉三角_yyds_LeetCode_python***

1.题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows …

第3章“程序的机器级表示”:异类的数据结构

文章目录 概述3.9.1 结构3.9.2 联合 概述 C提供了两种将不同类型的对象结合到一起来创建数据类型的机制&#xff1a;结构&#xff08;structure&#xff09;&#xff0c;用关键字 struct 来声明&#xff0c;将多个对象集合到一个单位中&#xff1b;联合&#xff08;union&…

Java网络开发(Asynchronous)—— 从 Jsp 到 Ajax 的 axios 到 vue 同步请求 到 异步请求

目录 引出如果想做bilibili边看视频边评论怎么搞&#xff1f;Ajax是啥&#xff1f;& axios的语法1. Ajax&#xff08;Asynchronous JavaScript And XML&#xff09;简介2. axios语法 及其与 java后端交互&#xff08;1&#xff09;get请求&#xff08;2&#xff09;post请求…

SpringBoot之Spring Data JPA入门学习

JPA&#xff08;Java Persistence API&#xff09;Java持久化API&#xff0c;是 Java 持久化的标准规范&#xff0c;Hibernate是持久化规范的技术实现&#xff0c;而Spring Data JPA是在 Hibernate 基础上封装的一款框架。 一、添加依赖 <dependency><groupId>or…

【git指南--命令大全】

我看好多文章命令都记录得比较发散不够全面&#xff0c;这里还是把我自己的笔记分享出来&#xff0c;方便查阅。 文章目录 1. git config作用域--list 显示当前所有配置配置cd ~/.ssh 2. 初始化 git 仓库1、把已有项目代码纳入 git 管理2、新建的项目直接用git 管理3、克隆仓库…

智能指针 smart_ptr

智能指针 为什么需要智能指针&#xff1f;内存泄漏什么是内存泄漏&#xff0c;内存泄漏的危害内存泄漏分类 智能指针的使用及原理RAII智能指针的原理std::auto_ptrstd::unique_ptrstd::shared_ptr 为什么需要智能指针&#xff1f; 下面我们先分析一下下面这段程序有没有什么内…

ps打开出现dll文件丢失怎么办,dll修复的三个方法

在Windows中&#xff0c;动态链接库&#xff08;DLL&#xff09;是一种可重用的代码和数据结构&#xff0c;它由多个应用程序共享&#xff0c;以提高内存利用率并减少冗余。DLL文件通常包含操作系统函数、图形驱动程序、网络驱动程序等&#xff0c;它们在Windows启动时被加载到…

大话Stable-Diffusion-Webui-客制化主题(四)

文章目录 目标效果开始重要说明单选框以及复选框图标样式更改gradio主题构建器上传主题方式代码上传主题方式目标 在DIY的主题中更改gradio单选框组件以及复选框组件的勾选后图标样式 效果 开始 笔者在使用gradio的主题构建器的过程中发现,gradio的复选框以及单选框组件勾选…

高通 Camera HAL3:如何在CAMX中查找Android TAG

之前的博文&#xff1a;《高通 Camera HAL3&#xff1a;添加一个VendorTag》中提到过&#xff0c;MetadataTag在CamX中有两种体现&#xff0c;可以是预定义的AndroidTag或是自定义VendorTag。 自定义VendorTag博文中已经讲解了 如何在CAMX中查找AndroidTag是经常要做的事 下…

【2】Midjourney注册

随着AI技术的问世&#xff0c;2023年可以说是AI爆炸性成长的一年&#xff0c;近期最广为人知的AI服务除了chatgpt外&#xff0c;就是从去年五月就已经问世的AI绘画工具mid journey了。 ▲几个AI工具也代表了人工智能的热门阶段 只要输入一段文字&#xff0c;AI就会根据语意计算…

Android 逆向之安全防护基本策略

对抗反编译 混淆 使用混淆主要可以减小包的大小。混淆对于安全保护来说&#xff0c;只是增加了阅读难度而已。混淆不会把关键代码混淆掉&#xff0c;比如MainActivity&#xff0c;Application等&#xff0c;可以通过分析smali和阅读jar包定位代码。 资源混淆也是换汤不换药&…

【VPX612】基于C6678 的6U VPX 实时信号处理平台

产品概述 VPX612 是一款基于6U VPX 架构的高性能实时信号处理平台&#xff0c;该平台采用4 片TI 的KeyStone 系列多核DSP TMS320C6678 作为主处理单元&#xff0c;采用1 片Xilinx 的Kintex-7 系列FPGA 作为协处理单元&#xff0c;各个处理节点之间通过高速串行总线进行互联。板…

遇到这3种接口测试问题,其实,你可以这么办~

作为整个软件项目的必经环节&#xff0c;软件测试是不可缺少的“查漏补缺”环节。而作为软件测试中的重要一环——接口测试&#xff0c;几乎串联了整个项目所有的输入和输出环节。 前几年&#xff0c;我在做后端测试时&#xff0c;接触最多的正是接口测试。基于此&#xff0c;…