【SpringCloud】Eureka的简单使用

本文使用的是jdk17,mysql8。

以下用两个服务做演示:

订单服务:提供订单ID,获取订单详细信息。

商品服务:提供商品ID,获取商品详细信息。

对于上篇http://t.csdnimg.cn/vcWpo  订单服务调用商品服务的时候,使用Spring提供的RestTemplate远程调用时,url部分是写死的,这是很不方便我们后续的操作。针对这个问题,这里使用Eureka来解决。


注册中心

注册中心是一种用于管理和协调微服务架构中各个服务实例的组件。它充当了服务注册和发现的中心,使得微服务能够相互发现和通信

服务注册:每个微服务启动时,会向注册中心注册自己的网络地址、服务名称和其他相关信息。注册中心将这些信息保存起来,以便其他服务可以查询。

服务发现:当一个微服务需要与其他服务进行通信时,它可以向注册中心查询目标服务的信息,如网络地址、可用实例等。这样,服务之间就可以通过注册中心来建立连接,实现相互通信。

注册中心主要有三种角色:

服务提供者(Server):一次业务中,给其他微服务提供接口使用。

服务消费者(Client): 一次业务中,调用其他微服务的接口。

服务注册中心(Registry): 用来保存服务提供者的信息,并且当服务提供者发生变化时,它也同步更新。服务与注册中心使用一定的通信机制,如果服务与注册中心长时间没有通信,那么注册中心就会注销服务。

常见的注册中心:

ZooKeeper:ZooKeeper是一种开源的分布式协调服务,在微服务架构中常被用作注册中心。它具有高可用、一致性和可靠性等特点。(CP保证一致性)节点分为Leader、Follower和Observer,当Leader出现故障时,需要选举出Leader,此时服务不可用。

Eureka:Eureka是Netflix开源的注册中心,具有简单易用、高可用、自我保护等特点,常被用于构建基于Spring Cloud的微服务架构。(AP保证高可用)每个节点都是均等的。

Nacos:Nacos是阿里巴巴开源的一款服务发现和配置管理平台,也可以作为微服务架构中的注册中心。它提供了服务注册、服务发现、动态配置管理和服务治理等功能,对于构建和管理云原生应用非常有用。(CP或AP,默认AP)


CAP理论

CAP理论由下面三部分构成:

一致性(Consistency):多个节点访问数据时,获得的数据都是相同的数据。如果无法保证数据是相同的,就不返回任何数据。

可用性(Availability):每个请求都有响应。可能某个节点返回的结果不对,但是也要返回。

分区容错性(Partition Tolerance):网络分区运行,但是依然可以对外提供服务。如果节点之间出现了故障,也能进行服务。

根据CAP定理,分布式系统只能满足其中两个属性,无法同时满足三个。这是因为在面对网络分区(节点之间无法相互通信)的情况下,系统必须在一致性和可用性之间进行权衡选择。而且在分布式系统中,分区容错性必须考虑,一旦发生错误,导致整个系统不能使用,这是不符合实际的。

于是就出现了:

  • CP架构:保证了分布式系统对外提供的数据一致性。如果不一致,就不返回任何数据。
  • AP架构:保证了分布式系统的可用性,返回的结果就算不对也要返回。

Eureka

Eureka是Netflix OSS套件中的服务注册和发现解决方案。Spring Cloud对Eureka进行了集成,并长期以来作为推荐的解决方案。尽管Eureka 2.0已经停止维护,并且在新的微服务架构设计中不再被推荐使用,但目前仍有许多公司的微服务系统在使用Eureka作为其注册中心。


组成

Eureka Server:作为服务中心的服务端,向微服务应用程序提供服务注册,发现,健康检查等。

Eureka Client:服务提供者,向服务端注册自己的信息(IP, 端口, 服务信息等),服务端会保存信息。


搭建Eureka Server

对于Eureka Server,应该创建成一个独立项目方便管理。这里为了方便,将在上一篇http://t.csdnimg.cn/PV6Xw 的基础上,把Eureka Server创建成子模块。

创建子模块

添加依赖

在刚才的eureka-server模块的pom中添加依赖。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

完整的pom文件 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-eureka</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件

server:
  port: 8360
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
    register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置Eureka Server的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
logging:
  pattern:
    console: '%d{MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

启动类

@EnableEurekaServer // 开启 Eureka Server
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

启动 

至此服务中心搭建成功。


服务注册

把product-service注册。

添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

修改配置

主要是添加了

server:
  port: 8350
spring:
  application:
    # 给product-service起个名字,方便eureka管理
    name: product-service
  datasource:
    url: jdbc:mysql://82.157.124.63:8220/cloud_product?characterEncoding=utf8&useSSL=false
    username: root
    password: pxf1212
    driver-class-name: com.mysql.cj.jdbc.Driver

# 设置 Mybatis 的 xml 保存路径
mybatis:
  configuration: # 配置打印 MyBatis 执行的 SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true  #自动驼峰转换

# 配置打印 MyBatis 执行的 SQL
logging:
  file:
    name: logs/springboot.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
  level:
    com:
      example:
        demo: debug

# Eureka Client
eureka:
  client:
    service-url:
      # product-service 使用这个地址 注册到 eureka-server
      defaultZone: http://127.0.0.1:8360/eureka/

启动

可以看到已经product-service已经注册到服务中心了。


服务发现

在order-service拉取product-service的服务信息,从而实现服务发现。

添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

修改配置

server:
  port: 8340
spring:
  application:
    name: order-service
  datasource:
    url: jdbc:mysql://82.157.124.63:8220/cloud_order?characterEncoding=utf8&useSSL=false
    username: root
    password: pxf1212
    driver-class-name: com.mysql.cj.jdbc.Driver


# 设置 Mybatis 的 xml 保存路径
mybatis:
  configuration: # 配置打印 MyBatis 执行的 SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true  #自动驼峰转换

# 配置打印 MyBatis 执行的 SQL
logging:
  file:
    name: logs/springboot.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
  level:
    com:
      example:
        demo: debug
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8360/eureka

远程调用

从eureka-server中获取product-service中的服务列表,并选择其中的一个调用。

package com.demo.order.service;

import com.demo.order.mapper.OrderMapper;
import com.demo.order.model.OrderInfo;
import com.demo.order.model.ProductInfo;
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.cloud.netflix.eureka.EurekaServiceInstance;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@Slf4j
@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

        public OrderInfo selectOrderById(Integer orderId) {
            OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
            List<ServiceInstance> instances = discoveryClient.getInstances("product-service");

            EurekaServiceInstance instance = (EurekaServiceInstance) instances.get(0);
            log.info(instance.getInstanceId());

            String url = instance.getUri() + "/product/" + orderInfo.getProductId();
            ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
            orderInfo.setProductInfo(productInfo);
            return orderInfo;
        }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Markdown 生成 Epub (Typora + pandoc)

文章目录 一、安装 pandoc二、Typora pandoc 导出 Pandoc 文件三、看看效果 一、安装 pandoc macOS 上使用 brew 安装 brew install pandoc其他系统可见&#xff1a;https://pandoc.org/installing.html 安装成功后查看版本 pandoc --version$ pandoc --version pandoc 2.1…

PS选不了颜色和路径描边?PS不知为何才能描边任意路径,这个办法让你秒懂

在选中路径的情况下&#xff0c;按图下操作&#xff0c;即可制作路径&#xff08;不会让你选不了颜色和路径描边&#xff09;

ArcGIS查找相同图斑、删除重复图斑

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 这次是上次 今天分享一下&#xff0c;很重要却被大家忽略的两个工具 这两个工具不仅可以找出属性…

聊一聊 Monitor.Wait 和 Pluse 的底层玩法

一&#xff1a;背景 1. 讲故事 在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上&#xff0c;曾经也有不少人问我为什么用 !syncblk 看不到 Monitor.Wait 上的锁信息&#xff0c;刚好昨天有时间我就来研究一下。 二&#xff1a;Monitor.Wait 底层怎么玩的 1. 案…

【启明智显产品分享】Model3工业级HMI芯片详解系列专题(三):安全、稳定、高防护

芯片作为电子设备的核心部件&#xff0c;&#xff0c;根据不同的应用领域被分为不同等级。工业级芯片适用于工业自动化、控制系统和仪器仪表等领域&#xff0c;对芯片的安全、稳定、防护能力等等有着较高的要求。这些芯片往往需要具备更宽的工业温度范围&#xff0c;能够在更恶…

阿里云服务器提醒漏洞要不要打补丁?

我们自己用的电脑一旦发现漏洞&#xff0c;往往是第一时间进行打补丁重启等等&#xff0c;但是作为服务器而言&#xff0c;往往没有这个习惯&#xff0c;为什么&#xff1f;因为害怕服务器打补丁以后&#xff0c;重启后出现打不开的情况&#xff0c;毕竟稳定的运行似乎在这种情…

最新版Cisco Packet Tracer思科模拟器Windows版本64位下载

Cisco Packet Tracer是思科公司推出的一款网络仿真工具&#xff0c;主要用于网络教学、培训和实验。它提供了一个真实的网络环境模拟平台&#xff0c;让用户可以设计、构建和调试网络&#xff0c;以及进行实时互动&#xff0c;从而帮助用户理解和实践网络技术。 通过 Cisco Pa…

稳定运行 极限生存│美创韧性运行安全体系正式发布

在全面数字化的今天&#xff0c;时刻运转的业务、实时流转的数据&#xff0c;已成为组织生产经营不可或缺的基石。然而&#xff0c;云化、国产化深入推进&#xff0c;数据快速增长&#xff0c;数据库、应用、中间件等信息化资产日益散杂多乱&#xff0c;给组织的运行安全带来更…

【docker】adoptopenjdk/openjdk8-openj9:alpine-slim了解

adoptopenjdk/openjdk8-openj9:alpine-slim 是一个 Docker 镜像的标签&#xff0c;它指的是一个特定的软件包&#xff0c;用于在容器化环境中运行 Java 应用程序。 镜像相关的网站和资源&#xff1a; AdoptOpenJDK 官方网站 - AdoptOpenJDK 这是 AdoptOpenJDK 项目的官方网站&…

UV胶带和UV胶水的应用场景有哪些不同吗?

UV胶带和UV胶水的应用场景有哪些不同吗? UV胶带和UV胶水的应用场景确实存在不同之处&#xff0c;以下是详细的比较和归纳&#xff1a; 一&#xff1a;按使用场景来看&#xff1a; UV胶带的应用场景&#xff1a; 包装行业&#xff1a;UV胶带在包装行业中常用于食品包装、药…

AMD vs NVIDIA:渲染领域的显卡之争

在数字创意与设计的世界里&#xff0c;显卡作为图形处理的核心&#xff0c;其性能与兼容性直接关系到创作者的工作效率与作品质量。AMD与NVIDIA&#xff0c;作为两大显卡巨头&#xff0c;各自在渲染领域拥有独特的技术与优势。那么&#xff0c;针对渲染而言&#xff0c;哪种显卡…

springboot vue 开源 会员收银系统 (7) 收银台的完善 新增开卡 结算

前言 完整版演示 开发版演示 在前面的开发中&#xff0c;我们成功完成了商品分类和商品信息的搭建&#xff0c;开发了收银台基础。现在&#xff0c;我们将进一步完善收银台的功能&#xff0c;添加开卡和结算功能&#xff0c;并在后台实现会员卡的创建和订单保存。同时&#xff…

2024-06月 | 维信金科 | 风控数据岗位推荐,高收入岗位来袭!

今日推荐岗位&#xff1a;策略分析经理/分析专家、贷前、中策略分析、风控模型分析。 风控部门是金融业务的核心部门&#xff0c;而从事风控行业的人即称之为风险管理者。是大脑&#xff0c;是最最最重要的部门之一。今日推荐岗位的核心技能分布如下&#xff1a; 简历发送方式…

一名女DBA的感谢信,到底发生了什么?

昨日我们收到这样一通来电 “早上九点刚上班便收到业务投诉电话&#xff0c;系统卡顿&#xff0c;接口失败率大增&#xff0c;怀疑数据库问题。打开运维平台发现是国产库&#xff0c;生无可恋&#xff0c;第一次生产环境遇到国产库性能问题&#xff0c;没什么排查经验&#xf…

Jetpack Compose 中的嵌套 LazyColumn

Jetpack Compose 中的嵌套 LazyColumn 在展示一组元素时&#xff0c;我们通常会使用 Column 和 Row。然而&#xff0c;当涉及到长列表的显示时&#xff0c;我们使用 LazyColumn、LazyRow 或 LazyGrids&#xff0c;这些组件仅渲染屏幕上可见的项目&#xff0c;从而提高性能并减…

MYSQL 四、mysql进阶 4(索引的数据结构)

一、为什么使用索引 以及 索引的优缺点 1.为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录部分&#xff0c;通过目录中找到对应文章的页码&#xff0c;便可快速定位到需要的文章。Mysql中也是一样的道理&#xff0c;进行数…

DY-110DP低电压继电器 25-124V 嵌入式安装 约瑟JOSEF

系列型号 DY-110电压继电器&#xff1b;GY-110电压继电器&#xff1b; GDY-110电压继电器&#xff1b;DY-110/AC电压继电器&#xff1b; GY-110/AC电压继电器&#xff1b;GDY-110/AC电压继电器&#xff1b; DL-110电压继电器&#xff1b;GL-110电压继电器&#xff1b; DL-…

汇编程序入门指南

什么是机器语言&#xff1f; 机器语言就是由二进制数字构成的程序&#xff0c;CPU 可以直接对其解释、执行。 汇编语言、C 语言、Java、BASIC 等编程语言编写的程序&#xff0c;也都需要先转换成机器语言才能被执行。机器语言有时也叫作“原生代码”&#xff08;Native Code&…

6V升12V2.5A芯片 升压恒压IC 惠海H6392 低功耗,高效率,高性价比

H6392是一款适用于2.6-5V输入电压范围的升压DC-DC转换器&#xff0c;具有多种优点&#xff0c;如高效率、低功耗、高精度和高性价比。 这款芯片具有多个显著特点&#xff0c;包括输出可调至12V、可调过电流保护范围为1.2~2.5A、内置18V耐压MOS等。其低待机功耗小于0.1uA&#x…

一种稀疏贝叶斯学习的旋转机械故障诊断方法(MATLAB)

轴承的故障诊断技术是通过检测轴承故障特征信息来判断轴承的具体故障为位置或损伤程度。在轴承发生损坏时&#xff0c;故障特征信息会随着工作时间的增长变得明显。轴承的损坏过程可以分为四个阶段。第一个阶段为损伤初始阶段&#xff0c;轴承故障特征信号一般无法测量。第二个…