IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud中集成Eureka实现集群部署服务注册与服务提供者 -> 正文阅读

[Java知识库]SpringCloud中集成Eureka实现集群部署服务注册与服务提供者

场景

SpringCloud分布式微服务项目搭建构造父子模块依赖与实现服务提供者与消费者示例:

SpringCloud分布式微服务项目搭建构造父子模块依赖与实现服务提供者与消费者示例_霸道流氓气质的博客-CSDN博客

SpringCloud分布式微服务项目Common通用依赖模块抽离:

SpringCloud分布式微服务项目Common通用依赖模块抽离_霸道流氓气质的博客-CSDN博客

在上面搭建项目结构基础上,首先是实现了单机模式下集成Eureka。

SpringCloud中集成Eureka实现服务注册(单机Eureka构建):

SpringCloud中集成Eureka实现服务注册(单机Eureka构建)_霸道流氓气质的博客-CSDN博客

Eureka集群原理

微服务RPC远程服务调用最核心的是高可用,如果注册中心只有一个,如果除了故障,会导致整个服务环境不可用。

Eureka集群的实现原理就是互相注册,相互守望。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、参考上面搭建7001Eureka服务注册中心的过程,再新建一个子模块7002

与7001一样,pom文件中添加eureka-server的依赖

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

新建主启动类EurekaMain7002并添加注解@EnableEurekaServer

package com.badao.springclouddemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

2、修改hosts文件

注意与之前单机模式下不同,在配置文件中配置eureka服务端的实例名称时如果再一台电脑下避免出现重复问题,

所以修改C:\Windows\System32\drivers\etc下的hosts文件

添加如下

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

使本机ip能映射出两个域名。

3、修改配置文件application.yml

修改Eureka Server7001的application.yml,配置eureka服务端的实例名称为eureka7001.com

并且将其service-url下的defaultZone指向其它eureka,这里将其指向7002

server:
  port: 7001


eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
    #集群指向其它eureka
      defaultZone: http://eureka7002.com:7002/eureka/

上面讲的集群搭建就是相互注册,相互守望,如果是搭建了三个集群,则1指向2和3,2指向1和3这种类推。

然后新建并修改Eureka Server7002的application.yml,配置其eureka服务端的实例名称为eureka7002.com

然后将其指向7001

server:
  port: 7002


eureka:
  instance:
    hostname: eureka7002.com #eureka服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      #集群指向其它eureka
      defaultZone: http://eureka7001.com:7001/eureka/

4、修改服务注册的服务提供者和服务消费者的注册方式

前面单机模式下,服务注册的方式是在application.yml中指向一个Eureka Server,现在集群模式下,需要将其

修改为注册到多个Eureka Server中

修改服务提供者8001的配置文件

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机版
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

同样修改服务消费者88的配置文件

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

5、测试效果

分别启动Eureka Server7001和7002,然后启动服务提供者8001和服务消费者88服务

访问

http://eureka7001.com:7001/

可以看到和7002互为守望,服务注册者和消费者也已经注册成功。

再访问

http://eureka7002.com:7002/

可以看到和7001互为守望,服务注册者和消费者也已经注册成功。

6、服务提供者集群搭建

通过上面实现了Eureka Server 集群的搭建,那么如果服务提供者也是只有一个的话,一旦宕机,也达不到集群的目的。

所以对于服务提供者同样也需要进行集群的搭建。

上面已经建立的服务提供者8001服务,参考其新建过程,复制一个一模一样只有端口为8002的服务

修改其pom文件中的依赖与8001一致

    <dependencies>
        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
            <groupId>com.badao</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

新建并修改其yml,从8001复制并修改其端口号

server:
  port: 8002

spring:
  application:
    name: cloud-payment-service

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
   url:jdbc:mysql://localhost:3306/springclouddemo?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机版
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka


mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.badao.springclouddemo.entities    # 所有Entity别名类所在包

从8001复制主启动类并修改名称为8002

然后其他业务类均从8001复制到8002,使服务提供者具备8001和8002两个服务

为了后面能演示出消费者调用服务提供者时负载均衡的效果,在服务提供者的Controller中加入端口的输出

7、服务消费者修改负载均衡

之前在服务消费者88服务中调用服务提供者服务时,url是固定写死的,这种只适用于单机模式,显示服务提供者

已经搭建了集群,所以不能再写死服务提供者的地址了,而是要通过服务提供者的别名进行访问

这个别名可以在Eureka中获取

而服务的别名的设置是在服务提供者的配置文件中配置

消费者服务在调用服务时要支持负载均衡,需要在RestTemplate的配置中使用@LoadBalanced注解赋予负载均衡的能力。

package com.badao.springclouddemo.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

8、测试集群搭建效果

启动7001和7002这两个Eureka Server,然后启动8001和8002这两个服务提供者,然后再启动88服务消费者

通过服务消费者访问服务提供者的服务,可以通过返回结果中的端口号看到负载均衡的效果

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:38:35  更:2022-05-13 11:39:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:27:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码