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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> springcloud+zookeeper 的服务发现与服务集群的搭建方式 -> 正文阅读

[大数据]springcloud+zookeeper 的服务发现与服务集群的搭建方式

简介

内容来源:链接
这是Eureka的替代方案,因为Eureka没更新了。
这个方案的搭建过程和Eureka一样方便。
尤其是服务集群的搭建,非常适合动态水平扩展,我觉得这点比 Eureka 强,因为 Eureka 需要配置 defaultZone 来指明各个集群服务器的地址,但是 Zookeeper 这个方案不需要修改配置文件,只要 spring.application.name 相同就被认为是同一个服务,然后集群服务设置不同端口就行了。

环境搭建

  • 注意,客户端和服务端的搭建方式完全一样,没有任何不同。
  • zookeeper整合springboot
<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spring.version>2.3.0.RELEASE</spring.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!--spring boot 2.2.2-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--spring cloud Hoxton.SR1-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- SpringBoot整合zookeeper客户端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    </dependency>
</dependencies>
  • application.yml
    • 需要配置 zookeeper 的连接地址
#服务别名----注册zookeeper到注册中心名称
spring:
  application:
    # 应用名称(服务名称)
    name: cloud-provider-payment
  cloud:
    zookeeper:
      # zookeeper的连接地址,多节点用逗号隔开
      connect-string: 192.168.132.201:2181
  • 主启动类,类上加上下面这个注解

可能出现的问题

org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for
这个是由于使用的zookeeper版本过低导致的,可以升级zookeeper的版本,或者降低引入的引擎版本

<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    <!--先排除自带的zookeeper3.5.3-->
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--添加zookeeper3.4.9版本-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.9</version>
</dependency>

服务中心的使用

节点信息的位置和含义

使用 zookeeper 客户端连接 zookeeper 会发现注册进去的服务变成了一个临时节点,连接的服务信息会被存储在 /services/{服务名}/{UUID} 节点下信息内容类似于下面这个

{
    "name": "cloud-provider-payment",
    "id": "ae024e43-703b-4edc-8a73-2cb7758fdb35",
    "address": "root",
    "port": 8084,
    "sslPort": null,
    "payload": {
        "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
        "id": "application-1",
        "name": "cloud-provider-payment",
        "metadata": {}
    },
    "registrationTimeUTC": 1602687210606,
    "serviceType": "DYNAMIC",
    "uriSpec": {
        "parts": [
            {
                "value": "scheme",
                "variable": true
            },
            {
                "value": "://",
                "variable": false
            },
            {
                "value": "address",
                "variable": true
            },
            {
                "value": ":",
                "variable": false
            },
            {
                "value": "port",
                "variable": true
            }
        ]
    }
}

服务断连

  • 一旦service宕机,zookeeper不会立马下线服务的节点,而是等待一段时间,一段时间过后仍旧断连的话,zookeeper 会删除该服务的临时节点。等到服务重新上线后,Zookeeper会重新生成一个临时服务节点。

服务调用

  • 该功能让客户端和服务端都注册进 Zookeeper 中,客户端可以通过服务的项目名 + 接口名来调用到服务的接口
  • 需要使用RestTemplate
    • 可以配置负载均衡和请求头信息
package wu.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;

/**
 * @auther zzyy
 * @create 2020-02-19 15:20
 */
@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}
  • 使用
package wu.controller;

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

@RestController
@RequestMapping
public class ServerController {
    @Autowired
    private RestTemplate restTemplate;
  	// 这里指明访问的服务项目名,对应spring.application.name
    public static final String INVOKE_URL = "http://cloud-provider-server";

    @GetMapping("/client")
    public String test(){
      	// 这里将直接被转发到服务端上,返回的数据就是服务返回的数据
        String result = restTemplate.getForObject(INVOKE_URL+"/server",String.class);
        return result;
    }
}

服务集群

  • 这里实现集群比较简单,比Eureka做的更方便。
  • 就是完全拷贝服务项目,然后只更改端口号,其他什么都不变即可
  • 因为 spring.application.name 是一致的,所以它们被 Zookeeper 认为是同一个服务,客户端可以通过相同的方式访问到,并且 RestTemplate 设置为负载均衡的话,可以平衡地访问两个服务。
  • 使用 Docker 把服务项目生成一个镜像,然后在启动多个暴露不同端口的容器,这样实现集群是非常方便的。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:34:18  更:2022-03-08 22:38:24 
 
开发: 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/24 9:56:42-

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