SpringCloud微服之Nacos的学习

1:使用前提

  • 第一步:解压启动Nocos
    SpringCloudAlibaba 推出了一个名为 Nacos 的注册中心,在国外也有大量的使用。
    在这里插入图片描述

startup.cmd -m standalone

访问http://localhost:8848/nacos/
在这里插入图片描述

  • 第二步:服务注册
    工程目录
    在这里插入图片描述

在父工程中添加依赖

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

在order-service user-service中添加依赖

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

在userService中跟orderService中 添加配置

spring:cloud:nacos:server-addr: 127.0.0.1:8848

项目重新启动后,可以看到三个服务都被注册进了 Nacos
在这里插入图片描述

2:Nocos是注册中心

a:已知

orderService服务需要调用 userService服务 但是userService是有多个的

b:oderService调用服务流程

  • order-service 如何得知 user-service 实例地址?
    user-service 服务实例启动后,将自己的信息注册到Nacos注册中心(Nacos服务端),叫做服务注册 eureka-server 保存服务名称到服务实例地址列表的映射关系 order-service 根据服务名称,拉取实例地址列表,这个叫服务发现或服务拉取 order-service
  • 如何从多个user-service 实例中选择具体的实例?
    order-service从实例列表中利用负载均衡算法选中一个实例地址,向该实例地址发起远程调用 order-service 如何得知某个
    user-service 实例是否依然健康,是不是已经宕机? user-service 会每隔一段时间(默认30秒)向
    nacos-server 发起请求,报告自己状态,称为心跳 当超过一定时间没有发送心跳时,nacos-server
    会认为微服务实例故障,将该实例从服务列表中剔除 order-service 拉取服务时,就能将故障实例排除了

3:Nacos是配置中心

a:使用背景

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
图片: https://uploader.shimo.im/f/tmzV4LITzapqXYW3.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

Nacos 一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
注意:项目的核心配置,需要热更新的配置才有放到 nacos 管理的必要。基本不会变更的一些配置(例如数据库连接)还是保存在微服务本地比较好。

b:项目启动的时候读取配置文件的顺序

未加入Nacos配置的 项目启动读取配置文件顺序
在这里插入图片描述

加入Nacos配置文件后的 项目启动读取配置文件的顺序
在这里插入图片描述

这样会引发一个问题,我们将Nacos服务的地址放到application.yml中 那么Nacos就无法根据地址去获取配置了
加入bootstarap.yml
图片: https://uploader.shimo.im/f/f1PHuAuEFafPfkqH.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

c:关于Nacos配置中心的通俗理解

那么实际使用的时候,我们的微服务是怎么从nacos上拿到配置文件的呢?我觉得本质是这样的:微服务在启动的时候,肯定会有个配置文件,这个配置文件中应该会说明 nacos的配置信息、命名空间、配置文件的名称等等信息,当有这些信息以后,相当于nacos集群和我们的服务之间就能实现网络互连,这样完全可以通过约定的协议从nacos上拿到对应的配置文件,拿到配置文件后再下载到本地上来,这样就实现了本地使用远程nacos上的配置文件了。而且如果要实现动态更新,比如在nacos上修改了这个配置文件的时候,也可以知道使用了该配置文件的服务是哪一些,然后通过网络下发通知说这个配置修改了,从而实现动态修改。不过我觉得这种动态更新应该只限制与一些普通配置文件,如果是一些数据库配置的话,毕竟微服务需要重新去连接一次数据库,和重启效果差不多是一样的了。
原文链接:https://blog.csdn.net/qq_35463905/article/details/116525129
(4):Nacos集群
“因为当一个nacos服务部署在A服务器中,如果这台服务器挂了,那么就会出现各个模块都无法访问的了,所以将nacos部署在多个服务器中,搭建一个集群的模式,这样可以预防一台服务器挂了,所以的服务都会收到影响。”
(5):Feign的远程调用
a:使用背景
Feign 是一个声明式的 http 客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现 http 请求的发送

原来我们orderService调用UserService
图片: https://uploader.shimo.im/f/iGzW1L9nm8BlAfkr.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

显示出的问题:
代码可读性差,参数不同一
b:Feigin的使用流程
引入依赖(在orderService中引入依赖)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

添加注解
在order-service的启动类上添加注解
图片: https://uploader.shimo.im/f/g1bmiXVpXEfQTdmt.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

在orderService中添加一个接口

package com.xn2001.order.client;
import com.xn2001.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

@FeignClient(“userservice”):其中参数填写的是微服务名
@GetMapping(“/user/{id}”):其中参数填写的是请求路径
这个客户端主要是基于 SpringMVC 的注解 @GetMapping 来声明远程调用的信息
Feign 可以帮助我们发送 http 请求,无需自己使用 RestTemplate 来发送了。
测试

@Autowired
private UserClient userClient;
public Order queryOrderAndUserById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// TODO: 2021/8/20 使用feign远程调用User user = userClient.findById(order.getUserId());// 3. 将用户信息封装进订单order.setUser(user);// 4.返回return order;
}

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

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

相关文章

前端大佬谈国产开源:VUE 的成功在于社区运营

喜欢就关注我们吧&#xff01;近日&#xff0c;国内首个开源软件基金会 —— 开放原子基金会在深圳国际开源谷举办了 TOC 圆桌论坛。论坛上&#xff0c;基金会 TOC 之一、国内知名前端大佬贺师俊表达了一些有趣的观点&#xff0c;阐述了自己对于国内开源生态的见解。贺师俊认为…

停止精神内耗 每日分享

停止反复犹豫 作家脱不花曾说&#xff1a;“人总是有很多左右为难的事情&#xff0c;如果你在做与不做之间来回纠结&#xff0c;那就停止来回推演&#xff0c;立即去做” 所谓三思而后行 那么如果只停留在三思 那么所有的愿景都将成为遗憾 放弃脑海当中左右不定的想法 扔掉徘…

eShopOnContainers 知多少[12]:Envoy gateways

1. 引言在最新的eShopOnContainers 3.0 中Ocelot 网关被Envoy Proxy 替换。下面就来简要带大家了解下Envoy&#xff0c;并尝试梳理下为什么要使用Envoy替代Ocelot。2. Hello EnvoyENVOY IS AN OPEN SOURCE EDGE AND SERVICE PROXY, DESIGNED FOR CLOUD-NATIVE APPLICATIONS.En…

为啥 Response.Write 后,View就不渲染了?

一&#xff1a;背景 1. 讲故事前几天群里有一位朋友聊到&#xff0c;为什么我在 Action 中执行一句 Response.Write 之后&#xff0c;后续的 View 就不呈现了&#xff0c;如果脑子中没有画面&#xff0c;那就上测试代码&#xff1a;public class HomeController : Controller{p…

3. 无重复字符的最长子串(滑动窗口详解版)

一:题目 二&#xff1a;上码 class Solution {/**分析&#xff1a;1.滑动窗口问题2.何时更改窗口的起点位置当出现重复的时候 需要从重复的字符的下一个字符开始计算*/public int lengthOfLongestSubstring(String s) {if (s.length() < 1) {return s.length();}int slowIn…

121. 买卖股票的最佳时机

一:题目 二:上码 class Solution {// public int maxProfit(int[] prices) {// int max 0;// for (int i 0; i < prices.length; i) {// //求出i后面的最大值// int temp 0;// for (int j i 1; j < prices.length; j) {// …

IdentityServer4系列 | 快速搭建简易项目

一 、前言从上一篇关于 常见术语说明中&#xff0c;主要是对「IdentityServer4」的说明&#xff0c;以及其中涉及常见的术语的表述说明&#xff0c;包括对身份认证服务器、用户、客户端、资源以及各个令牌等进行对比区别说明。而在这一篇中&#xff0c;我们将尝试通过简单的方式…

136. 只出现一次的数字(hot100)

一:题目 二:上码 class Solution {public int singleNumber(int[] nums) {int ans -100;Arrays.sort(nums);for (int i 0; i < nums.length-1; i2) {if (nums[i] ! nums [i1]) {ans nums[i];break;}}return ans -100 ? nums[nums.length-1] : ans;} }

高并发项目Java是标配?.NET Core要将它拉下“神坛”!

电商的秒杀和抢购&#xff0c;对我们来说&#xff0c;都不是一个陌生的东西。然而&#xff0c;从技术的角度来说&#xff0c;这对于Web系统是一个巨大的考验。当一个Web系统&#xff0c;在一秒钟内收到数以万计甚至更多请求时&#xff0c;系统的优化和稳定至关重要。缓存技术是…

141. 环形链表(hot100)

一:题目 二:上码 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public boolean hasCycle(ListNode head) {ListNode fa…

程序员修神之路--分布式系统使用网关到底是好还是坏?

“灵魂拷问分布式系统需要统一的网关吗&#xff1f;网关会带来哪些优势&#xff1f;引入网关会带来灾难吗&#xff1f;分布式系统的设计大体上分为中心化和非中心化&#xff0c;像现在流行的微服务模式&#xff0c;本质上是把各种业务拆分为独立的进程来实现业务的扩展性。伴随…

160. 相交链表(hot100)

一:题目 二:上码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListN…

.NET Core开源任务调度平台ScheduleMaster上新了

ScheduleMaster上一次比较大的更新还是在6月份&#xff0c;转眼已经快过去4个月了&#xff0c;这段时间比较忙&#xff0c;中间只更新过一次修复了几个小bug。要总结这次更新的话&#xff0c;必须要用“千呼万唤始出来”了&#xff0c;因为这次不仅经历的时间比较久&#xff0c…

234. 回文链表(hot100)

一:题目 二:上码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ …

T-SQL | 逻辑查询处理内幕学习

【T-SQL】| 作者 / Edison Zhou这是EdisonTalk的第296篇学习分享T-SQL是ANSI和ISO SQL标准的MS SQL扩展&#xff0c;其正式名称为Transact-SQL&#xff0c;但一般程序员都称其为T-SQL。本文是我学习《T-SQL查询》一书的读书笔记&#xff0c;为你讲解逻辑查询的内幕。1逻辑查询处…

461. 汉明距离(详解)

一:题目 二:上码 class Solution {/**在信息论中&#xff0c;两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数换句话说就是将字符串转换成另一个字符串需要替换的字符的个数*/public int hammingDistance(int x, int y) {int count 0;if (x y) return 0;…

在 Azure 上给我的博客配置负载均衡

点击上方蓝字关注“汪宇杰博客”导语前阵有美国读者嘲讽我的博客在美国地区页面加载速度太慢&#xff0c;还好意思写性能优化的文章。为了让美国朋友们闭嘴&#xff0c;并不给中国人丢脸&#xff0c;我使用了钞能力&#xff0c;在 Azure 国际版上给我的博客部署了一个美国地区的…

543. 二叉树的直径(详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

C#实现乞丐版IOC容器

一、前言netcore中的容器非常好用&#xff0c;今天我们自己来简单实现一个。实现容器的核心接口有两个&#xff1a;IServiceCollection、IServiceProvider。其中IServiceCollection定义容器集合&#xff0c;IServiceProvider提供容器中对象的访问。话不多说&#xff0c;直接编码…

leetcode hot100.2. 两数相加(详解)

一:题目 二:上码 // /** // * Definition for singly-linked list. // * public class ListNode { // * int val; // * ListNode next; // * ListNode() {} // * ListNode(int val) { this.val val; } // * ListNode(int val, ListNode next) { t…