spring cloud Alibaba之Nacos Discovery--服务治理 (二)

接着上一篇文章 搭建的微服务环境, 实现nacos 注册中心实战操作案例

一.  服务治理介绍

先来思考一个问题

        通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题

  • 一旦服务提供者地址变化,就需要手工修改代码
  • 一旦是多个服务提供者,无法实现负载均衡功能
  • 一旦服务变得越来越多,人工维护调用关系困难

那么应该怎么解决呢, 这时候就需要通过注册中心动态的实现服务治理

什么是服务治理

服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现

服务注册:  在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服 务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中 的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。

服务发现: 服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实 例的访问。

 通过上面的调用图会发现,除了微服务,还有一个组件是服务注册中心,它是微服务架构非常重要 的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:

1. 服务发现:

  •         服务注册:保存服务提供者和服务调用者的信息
  •         服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息

2. 服务配置:

  •         配置订阅:服务提供者和服务调用者订阅微服务相关的配置
  •         配置下发:主动将配置推送给服务提供者和服务调用者

3. 服务健康检测 检测服务提供者的健康情况,如果发现异常,执行服务剔除

常见的注册中心

  • Zookeeper

zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式 应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用 配置项的管理等。

  • Eureka

Eureka是Springcloud Netflix中的重要组件,主要作用就是做服务注册和发现。但是现在已经闭 源

  • Consul

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现 和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value 存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以 安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。

  • Nacos

Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config

二. nacos简介

Nacos 致力于帮助您发现、配置和管理微服务。

Nacos 提供了一组简单易用的特性集,帮助您快速 实现动态服务发现、服务配置、服务元数据及流量管理。 从上面的介绍就可以看出,nacos的作用就是一个注册中心,用来管理注册上来的各个微服务

nacos实战入门

接下来,我们就在现有的环境中加入nacos,并将我们的两个微服务注册上去

搭建nacos环境

第1步: 安装nacos
 

下载地址: https://github.com/alibaba/nacos/releases
下载zip格式的安装包,然后进行解压缩操作

第2步: 启动nacos

#切换目录
cd nacos/bin
#命令启动
startup.cmd -m standalone

第3步: 访问nacos

打开浏览器输入http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos 

 将商品微服务注册到nacos

接下来开始修改 shop-product 模块的代码, 将其注册到nacos服务上

1 在pom.xml中添加nacos的依赖

 

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

2 在主类上添加@EnableDiscoveryClient注解

 

@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication

3 在application.yml中添加nacos服务的地址

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

4 启动服务, 观察nacos的控制面板中是否有注册上来的商品微服务

 

 将订单微服务注册到nacos

接下来开始修改 shop_order 模块的代码, 将其注册到nacos服务上

1 在pom.xml中添加nacos的依赖

 

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

2 在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication

3 在application.yml中添加nacos服务的地址

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

 4 修改OrderController, 实现微服务调用

 

package com.example.server.controller;import com.alibaba.fastjson.JSON;
import com.example.server.pojo.Order;
import com.example.server.pojo.Product;
import com.example.server.service.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
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
@Slf4j
public class OrderController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate OrderService orderService;@Autowiredprivate DiscoveryClient discoveryClient;//准备买1件商品@GetMapping("/order/prod/{pid}")public Order order(@PathVariable("pid") Integer pid) {log.info(">>客户下单,这时候要调用商品微服务查询商品信息");
//从nacos中获取服务地址ServiceInstance serviceInstance =discoveryClient.getInstances("service-product").get(0);String url = serviceInstance.getHost() + ":" +serviceInstance.getPort();log.info(">>从nacos中获取到的微服务地址为:" + url);
//通过restTemplate调用商品微服务Product product = restTemplate.getForObject("http://" + url + "/product/" + pid, Product.class);log.info(">>商品信息,查询结果:" + JSON.toJSONString(product));Order order = new Order();order.setUid(1);order.setUsername("测试用户");order.setPid(product.getPid());order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.save(order);return order;}
}

DiscoveryClient是专门负责服务注册和发现的,我们可以通过它获取到注册到注册中心的所有服 务

5 启动服务, 观察nacos的控制面板中是否有注册上来的订单微服务,然后通过访问消费者服务验证调 用是否成功

 完成!!!

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

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

相关文章

PHPMySQL基础(五):模拟登录后跳转+会话存储功能实现

PHP&MySQL基础&#xff08;一&#xff09;:创建数据库并通过PHP进行连接_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;二&#xff09;:通过PHP对MySQL进行增、删、改、查_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;三&#xff09;:处理查询SQL返…

excel用条件格式设置隔行变色

1、选中要设置隔行变色的区域 2、点击条件格式—>新建规则—>使用公式确定要设置格式额单元格 3、输入公式 mod(row(),2) 0&#xff0c;点击格式按钮&#xff0c;选择填充的颜色&#xff0c;点击确定。如下图所示&#xff1a; 4、在新建格式规则窗口中点击确定&#x…

Web|设置隔行变色的单元格

问题 表格在日常生活中使用的非常的多,比如excel就是专门用来创建表格的工具,表格就是用来表示一些格式化的数据的,比如:课程表、银行对账单。在网页中也可以来创建出不同的表格。在HTML中,使用table标签来创建一个表格,在table标签中使用tr来表示表格中的一行,有几行就…

Excel小技巧,隔行变色,多行变色

Excel小技巧&#xff0c;隔行变色&#xff0c;多行变色&#xff0c;间隔色&#xff0c;关键在于公式&#xff1a; mod(row(),x)y 其中x指期望的每隔&#xff08;x-1&#xff09;行变色&#xff0c;y等于每隔的第(y1)行&#xff1b; 比如&#xff1a;mod(row(),2)0 用来设置每…

[蓝桥杯/java/算法]A——隔行变色

&#x1f9d1;‍&#x1f393;个人介绍&#xff1a;大二软件生&#xff0c;现学JAVA、Linux、MySQL、算法 &#x1f4bb;博客主页&#xff1a;渡过晚枫渡过晚枫 &#x1f453;系列专栏&#xff1a;[编程神域 C语言]&#xff0c;[java/初学者]&#xff0c;[蓝桥杯] &#x1f4d6…

前端 | 设置隔行变色的单元格

欢迎点击「算法与编程之美」↑关注我们&#xff01; 本文首发于微信公众号&#xff1a;"算法与编程之美"&#xff0c;欢迎关注&#xff0c;及时了解更多此系列文章。 问题描述 表格在日常生活中使用的非常的多&#xff0c;比如excel就是专门用来创建表格的工具&#…

java中设置基偶隔行换色_excel2010如何设置隔行变色

在使用excel的过程中&#xff0c;一定见过别人编排的excel文档&#xff0c;隔行添加单元格背景颜色&#xff0c;也就是通常所说的隔行变色效果。下面就跟学习啦小编一起看看吧。 excel2010设置隔行变色的步骤 第一步&#xff0c;启动Excel2010&#xff0c;打开相应的工作簿文档…

python如何实现隔行换色_Excel2010如何实现隔行设置背景色

当Excel表格中的数据很多&#xff0c;很有可能会出现看错行的现象&#xff0c;为防止看错行&#xff0c;可以隔行设置背景色。可以通过套用表格格式或者条件格式来达到隔行变色的效果 方法一&#xff1a;通过套用表格格式 1、选中要处理的单元格或者列。 说明&#xff1a;选择列…

Excel 隔行变色

2019独角兽企业重金招聘Python工程师标准>>> 在日常办公Excel操作中&#xff0c;经过遇到需要将表格不同行或者不同列之间标记为不同的颜色来区分。如果只有少量可以直接进行操作&#xff0c;当数量较大时再一行一行或者一列一列操作就显得不够专业了。那么该如何快…

【测试基础01】

本期参考文献: 链接 一、安装mysql 1、安装mysql可以参考链接: 文章 2、安装mysql与python的工具 进行校验&#xff0c;查看是否安装成功 二、创建库 mycursor mydb.cursor() mycursor.execute("CREATE DATABASE ck") 执行语句创建库在mysql库里可以看到…

微信如何群删好友 微信群删好友的方法教程

微信作为如今的日常通讯软件&#xff0c;可以说是融入了生活中的方方面面&#xff0c;而有些人在使用过程中添加了很多好友&#xff0c;但对于一些不怎么熟悉的好友可以选择删除&#xff0c;不过要是好友太多一个一个删也很麻烦&#xff0c;那么&#xff0c;微信如何群删好友?…

终于!微信正式版群聊可折叠:满屏群信息成为历史

9月26日消息&#xff0c;微信今日发布了iOS端的8.0.14版本&#xff0c;微信群聊终于可折叠了。 小雷使用iPadOS上的微信进行了测试&#xff0c;在群聊界面的菜单中&#xff0c;会出现一个“折叠该群聊”的选项&#xff0c;勾选即可折叠该群聊。折叠后&#xff0c;“折叠的群聊”…

微信怎么找群聊?找回微信群聊只需要这样…

如今社会中的日常生活已经离不开微信&#xff0c;微信是社交界的一股清流&#xff0c;聊天、视频、语音等等功能&#xff0c;而且支付功能的用途范围在国内也甚是广泛。微信怎么找群聊&#xff1f;是的&#xff0c;当多个好友之间相互认识&#xff0c;或者都有一个共同点的时候…

【微信机器人】可做自动回复,自动接收转账,群聊机器人。

前言&#xff1a; 目前市面上的微信机器人项目少之又少&#xff0c;并且大多数的不可用。比如用抓取网页微信接口&#xff0c;但大多数人的账号没有使用网页微信的权限。又或者价格昂贵&#xff0c;如使用微信pad协议。于是便开发一个通过Hook微信的DLL文件&#xff0c;修改其…

半群与群

半群与独异点 半群与独异点的定义 定义11.1 (1)设V<S,>是代数系统,为二元运算,如果运算是可结合的,则称V为半群。    (2)设V<S,>是半群,若e∈S是关于运算的单位元,则称V是含幺半群,也叫做独异点。有时也将独异点V记作V<S,,e>. 例11.1 (1)<Z,&…

JS中手撕防抖函数和节流函数

1.防抖函数 1.1定义 说明&#xff1a;在一定时间内&#xff0c;频繁执行事件&#xff0c;只执行最后一次函数。(英雄联盟回城) 1.2步骤&#xff1a; 声明定时器函数判断是否有定时器函数&#xff0c;如果有定时器函数的话就清除定时器。。如果没有定时器函数的话&#xff0…

微服务Spring Cloud 02------使用Eureka实现注册中心(1)

1.Eureka简介 Eureka是Spring Cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)和P(分区容错性)。 Eureka是Netflix中的一个开源框架。它和 Zookeeper、Consul一样&#xff0c;都是用于服务注册管理的&#xff0c;同样&#xff0c;Spring-Cloud 还集成了Zo…

中台分类

大家好&#xff0c;我是易安&#xff0c;之前我们谈到过中台的概念&#xff0c;以及如何落地中台。今天我就带你一起看一看&#xff0c;行业常见的中台分类。 业务中台与数据中台 业务中台 业务这个词&#xff0c;其实是有些宽泛的&#xff0c;我听到很多人口中说的业务都不是…

NeRF-SLAM代码记录

前言 没运行成功,尤其是编译gtsam部分,每一步都有错,又是讨厌c++第一天。 这一行编译到92% 就会报错 python/CMakeFiles/gtsam_py.dir/build.make:250: recipe for target python/CMakeFiles/gtsam_py.dir/linear.cpp.o failed make[2

考研C语言第七章

7.2函数的声明定义&#xff0c;函数的分类和调用 1、函数声明要在main函数上面&#xff0c;这样main函数才可以进行调用 第一节课主要就学了函数的调用&#xff0c;项目在开发的时候分工用的比较多 主要结构&#xff1a; func.c里面进行函数的定义 不是很重要&#xff0c;进…