5、alibaba微服务nacos的引入和使用

news2024/11/23 16:56:46

1、项目中引入nacos

父项目中已经引入了spring-cloud-alibaba,这个里面就已经包含nacos依赖了,所以在子项目中引入nacos依赖不用添加版本信息

    <dependencies>
        <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中添加服务的名称和nacos服务地址信息

server:
  port: 8020
  #应用名称(nacos会将该名称当做服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 192.168.1.146:8848
      discovery:
        #不配置,默认的就是nacos
        username: nacos
        password: nacos
        #namespace的默认值就是public,可以不用配置
        namespace: public
server:
  port: 8021
  #应用名称(nacos会将该名称当做服务名称)
spring:
  application:
    name: stock-service
  cloud:
    nacos:
      server-addr: 192.168.1.146:8848
      discovery:
        #不配置,默认的就是nacos
        username: nacos
        password: nacos
        #namespace的默认值就是public,可以不用配置
        namespace: public

然后咱们启动这两个服务

 通过日志,咱们可以看到服务已经注册到nacos中了,那么咱们访问下nacos

 可以看到服务已经注册到nacos中了。

点击操作列的“详情”,可以看到详细的元数据信息

 如果将服务停止,15s左右健康状况改成false,如果20s-30s左右检测不到心跳,会将这个服务剔除掉。

2、代码中对nacos的使用

通过order中调用stock库存的原先的代码

package com.chinasofti.order.controller;

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

/**
 * @Author mxx
 * @Date 2023/6/12 16:44
 * @Version 1.0
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String msg=restTemplate.getForObject("http://localhost:8011/stock/reduct",String.class);
        return "Hello World!"+msg;
    }
}

引入nacos之后的代码:

package com.chinasofti.order.controller;

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

/**
 * @Author mxx
 * @Date 2023/6/12 16:44
 * @Version 1.0
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String msg=restTemplate.getForObject("http://stock-service/stock/reduct",String.class);
        return "Hello World!"+msg;
    }
}

重启下order的服务,调用下add方法看看

访问失败了,这是为啥呢,原因是nacos解析不了ip端口这些东西,它需要负载均衡器进行调用,负载均衡器默认采用轮询的方式调用库存服务,nacos默认采用的负载均衡是Ribbon

怎么引入负载均衡器呢,咱们在咱的RestTemplate中加一个注解 @LoadBalanced,如下:

package com.chinasofti.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @Author mxx
 * @Date 2023/6/12 16:55
 * @Version 1.0
 */
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate =  builder.build();
        return restTemplate;
    }
}

然后重启order服务再次访问,成功了,如下:

咱们如何测试nacos的负载均衡器的轮询的方式呢,咱们通过将stock复制一份出来

将复制出来的server.port 端口修改为8022

 

 为了方便查看咱们到底请求的是哪个stock,那么咱们修改下stock的代码,加上访问的端口

package com.chinasofti.stock.controller;

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

/**
 * @Author mxx
 * @Date 2023/6/12 16:48
 * @Version 1.0
 */
@RestController
@RequestMapping("/stock")
public class StockController {
    @Value("${server.port}")
    String port;
    @RequestMapping("/reduct")
    public String reduct(){
        System.out.println("扣减库存");
        return "扣减库存:"+port;
    }
}

 然后咱们将这三个服务都启动起来,再访问下订单的地址

多次刷新,发现一会访问的是8021,一会访问的是8022,这样咱们就实现轮询了 

 

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

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

相关文章

Java创建线程的两种方式和线程的生命周期

方式一&#xff1a;继承Thread类的方式&#xff1a; 创建一个继承于Thread类的子类 重写Thread类的run() --> 将此线程执行的操作声明在run()中 创建Thread类的子类的对象 通过此对象调用start()&#xff1a;①启动当前线程 ② 调用当前线程的run() 说明两个问题&#…

Python3数据分析与挖掘建模(12)多因子:复合分析-相关分析与实现示例

1. 相关分析 1.1 概述 相关分析是一种统计分析方法&#xff0c;用于研究两个或多个变量之间的关系和相互影响程度。它帮助我们了解变量之间的线性关系、趋势和相关程度。 在相关分析中&#xff0c;常用的指标是相关系数&#xff0c;用于衡量两个变量之间的相关程度。最常见的…

Linux之文件一般权限

目录 Linux之文件一般权限 文件和目录的一般权限 解析&#xff1a; 文件类型 文件的权限针对三类对象进行定义 文件针对每类访问者定义的三种权限 对于文件和目录&#xff0c;r&#xff0c;w&#xff0c;x的作用以及含义 设置文件和目录的一般权限 修改文件或目录权限 ---…

论文可视化分析神器——CiteSpace和vosviewer

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

MySQL启停要十分钟?

一、问题背景 基础环境&#xff1a; 主机类型&#xff1a;x3850 X6 操作系统&#xff1a;DB:Red Hat Enterprise Linux 9.1 7.8 存储&#xff1a;IBM存储&#xff0c;500GB 内存&#xff1a;64 G CPU型号&#xff1a;E7-4830 v3 2.10GHz CPU核数&#xff1a;32CORE 数据…

洞察丨挖掘游戏行为数据价值的 6 个新思路

现阶段&#xff0c;游戏赛道越来越难&#xff0c;主要表现在玩家对游戏质量的要求提高、游戏立项选择空间变小、游戏买量越来越贵且回本周期越来越长……与此同时&#xff0c;游戏出海势头依然强劲&#xff0c;难以突破重围。 可以说&#xff0c;几乎所有的游戏都在尽可能地朝着…

便利店小程序怎么做

便利店小程序是一种基于移动互联网的购物平台&#xff0c;它为用户提供了便捷的购物体验&#xff0c;可以满足用户的购物需求。下面是便利店小程序的主要功能介绍&#xff1a; 1. 商品展示&#xff1a;便利店小程序可以展示商家的商品信息&#xff0c;包括商品图片、价格、描述…

【什么是iMessage推送,im群发】苹果推iMessage是苹果公司为其设备用户提供的即时通讯服务

iMessage是苹果公司为其设备用户提供的即时通讯服务&#xff0c;拥有一系列强大的功能和特点。然而&#xff0c;至今为止&#xff0c;苹果并未提供官方的群发部署功能。iMessage主要被设计为点对点的通信工具&#xff0c;即用户可以与一个或多个人进行私密的聊天对话。以下是关…

酷克数据简丽荣:“模型热”将引发云计算与数据库行业大变革

随着LLM智能涌现的发生和API的爆发式发展&#xff0c;各行各业都在关注如何用好通用模型&#xff0c;如何调校好适合自己的行业应用。LLM最重要的输入是数据&#xff0c;最频繁的接口是数据库。模型应用的普及会对数据库产生哪些影响&#xff1f;大模型时代对企业的数据管理能力…

深度学习应用篇-元学习[13]:元学习概念、学习期、工作原理、模型分类等

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

通讯基站电源智能监控系统

通信基站又称无线基站&#xff0c;一般都安装在宽阔、偏远的地方&#xff0c;且分散&#xff0c;实现人工值守十分困难&#xff0c;成本高&#xff1b;另外局部内动力设备、蓄电池电源以及环境无法及时监视和控制&#xff0c;造成事故频发。然而蓄电池作为直流备用电源&#xf…

怎么把图片放大不改变清晰度,给大家介绍两个方法

时代的发展和进步&#xff0c;我们在使用手机、电脑等设备时&#xff0c;常常需要对图片进行放大操作。从功能上来说&#xff0c;图片放大可以让我们更好地观看和理解图片内容&#xff0c;同时也可以提高图像分辨率和清晰度&#xff0c;以满足不同的需求和场景首先&#xff0c;…

SQL-将数组打散regexp_replace/split/explode

目的&#xff1a;将数组&#xff08;拒绝码refuse_codes&#xff09;打散 原数据&#xff1a; 打散后数据col&#xff1a; – regexp_replace()替换函数 – split()函数是用于切分数据&#xff0c;也就是将一串字符串切割成了一个数组 – explode()函数是用于打散行的函数&am…

Ubuntu安装英伟达显卡驱动、Cuda和Cudnn

显卡驱动安装 1、下载对应型号显卡驱动 首先查看自己机器显卡型号 lspci | grep -i nvidia得到如下输出&#xff0c;其中GeForce GTX 1080就是型号 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 01:00.1 Audio device: NVIDI…

第14届蓝桥杯Scratch(中级)省赛真题解析2023.5.14

选择题 1. 已知下图角色一共有3个造型,则以下选项中,不能呈现下图中第三个造型效果的程序是(C) *选择题严禁使用程序验证,选择题不答或答错都不扣分 A. B. C. D. 2. 运行以下程序,循环执行4次后,x的值是(D)。 *选择题严禁使用程序验证,选择题不答或答错都不扣分

vue2之element-ui多个穿梭框实现 -Transfer

效果图 组件实现 -目录结构 Transfer.vue实现 <template><el-card :body-style"{ minHeight: 350px }"><el-inputv-show"filterable"v-model"filterName":placeholder"filterPlaceholder"clearableinput"han…

【Flutter】Flutter 如何切换页面

文章目录 一、简介二、Navigator 的使用三、实际示例&#xff1a;电影应用的页面切换四、完整代码五、 总结 一、简介 什么是页面切换呢&#xff1f;简单来说&#xff0c;页面切换就是在应用的不同界面之间进行跳转。例如&#xff0c;在一个电影应用中&#xff0c;从电影列表页…

java基础(多线程)-共享模型之管程

一、共享资源带来的问题 class ThreadProblem{static int counter 0;public static void testThread(){Thread t1 new Thread(()-> {for (int i 0; i < 5000; i) {counter;}},"t1");Thread t2 new Thread(()-> {for (int i 0; i < 5000; i) {count…

基于html+css的图展示126

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

苹果手机之间如何互传照片?批量传输操作指南

很多时候&#xff0c;我们用手机拍摄了好看的照片或者收藏了一些有趣的图片&#xff0c;想要分享给朋友&#xff0c;却不知道苹果手机之间如何互传照片&#xff1f;在分享大量照片的时候不清楚如何批量操作&#xff1f;别担心&#xff0c;下面小编就来分享一下苹果手机照片传输…