duubo+zookeeper

news2024/11/24 14:36:14

1、Dubbo简介

1. Dubbo是什么?

高性能、轻量级、开源、基于java

Dubbo 是阿里集团开源的远程服务调用的分布式框架(告别Web Service模式中的WSDL,以服务者与消费者的方式在dubbo上注册)

协议和序列化框架都可以插拔是及其鲜明的特色。

同样的远程接口是基于 Java Interface,并且依托于 Spring 框架方便开发。可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致。

图片

2. Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3.服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

3、Dubbo的原理

dubbo-architucture

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、Zookeeper

hadoop组件之一

docker安装Zookeeper

#安装zookeeper镜像
docker pull registry.docker-cn.com/library/zookeeper
#运行zookeeper
docker run --name zk01  --restart always -d -p 2111:2181 bf5cbc9d5cac

3、Dubbo、Zookeeper整合

目的:完成服务消费者从注册中心查询调用服务生产者

1、将服务提供者注册到注册中心

1)、引入dubbo和zkclient的相关依赖

<!--老版本 估计要被淘汰了吧-->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.1.0</version>
</dependency>

<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>

<!--【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖;--狂神-->
<!-- 引入zookeeper -->
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-framework</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-recipes</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.14</version>
   <!--排除这个slf4j-log4j12-->
   <exclusions>
       <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
       </exclusion>
   </exclusions>
</dependency>

Curator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等。

Curator 包含了几个包:

  • curator-framework:对 zookeeper 的底层 api 的一些封装。
  • curator-client:提供一些客户端的操作,例如重试策略等。
  • curator-recipes:封装了一些高级特性,如:Cache 事件监听、选举、分布式锁、分布式计数器、分布式 Barrier 等。

2)、配置service服务,新建service.TicketService 和service.TicketServiceImp

public interface TicketService {
    public String getTicket();
}
import com.alibaba.dubbo.config.annotation.Service;
@Component
//注解是dubbo包下的service
@Service
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《厉害了,我的国》";
    }
}

3)、配置文件application.yml

dubbo:
  application:
    name: provider-ticket						#服务名
  registry:
    address: zookeeper://192.168.179.131:2111	 #注册中心地址
  scan:
    base-packages: com.wdjr.ticket.service
server:
  port: 9001

4)、启动服务提供者

2、服务消费者

1)、引入Dubbo和Zookeeper的依赖

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.1.0</version>
</dependency>

<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>

2)、新建一个service.userService,并将TicketService的接口调用过来【全类名相同-包相同】

package com.wdjr.user.service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.wdjr.ticket.service.TicketService;

import org.springframework.stereotype.Service;

//UserService接口
@Service
public class UserService {

    @Reference	
    TicketService ticketService;

    public void hello(){
        String ticket = ticketService.getTicket();
        System.out.println("您已经成功买票:"+ticket);
    }
}

Dubbo2.7.7据说是@DubboReference

3)、配置文件application.yml

dubbo:
  application:
    name: comsumer-user
  registry:
    address: zookeeper://192.168.179.131:2111

4)、编写测试类测试

@Autowired
UserService userService;
@Test
public void contextLoads() {
    userService.hello();
}

结果展示:

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

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

相关文章

【办公类-22-04】周计划系列(4)-生成“周计划”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

代码相当复杂&#xff0c;操作很繁琐&#xff0c;自己都要研究半天T_T 文件夹展示 01提取提取新表的已有内容&#xff08;提取大8班、大7班的新版本里面的额内容&#xff09; &#xff08;需要里面的一些反思&#xff0c;用来占位&#xff09; 这里有一份根据新模板用Python批…

spring2:创建和使用

目录 1.创建Spring项目 1.1创建Maven类 1.2添加Spring支持框架 1.3添加启动类 2.存储Bean对象 2.0 spring项目中添加配置文件(第一次) 2.1创建Bean 2.2把Bean注册到容器中 3.获取并使用Bean对象 3.1创建上下文 3.2获取指定Bean对象 getBean()方法 --> 获取什么…

双周赛103(模拟、网格图BFS、树状数组)

文章目录 双周赛103[6406. K 个元素的最大和](https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/)模拟 [6405. 找到两个数组的前缀公共数组](https://leetcode.cn/problems/find-the-prefix-common-array-of-two-arrays/)模拟 [6403. 网格图中鱼的最大数目](…

Java 基础进阶篇(一)——— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static&#xff1a;代表静态的意思&#xff0c;可…

【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 collate_fn函数理解与记录

目录 Dataloader取数据过程使用报错&#xff1a;默认collate_fn处理不同长度的数据自定义collate_fn伪代码示例 Dataloader取数据过程 取出大小等同于batch size的index列表;将列表列表中的index输入到dataset的getitem()函数中&#xff0c;取出该index对应的数据;对每个index…

一种基于坑位模版的分页方案

一. 概述 1.1 业务诉求 想象一个向用户展示数据的下拉列表&#xff0c;数据的来源有多种方式。支持在每一页都按固定的数据源类型及顺序展示。 1.2 业务场景 up主的主页展示带货商品列表 商品来源有多种&#xff1a;up主自选、官方推荐的、根据up主风格AI推荐用户推荐视频列表…

【编辑刷新数据-汽车品牌展示 Objective-C语言】

一、我们这个利用可重用cell展示汽车品牌案例,就说完了,然后我们再给大家说一个什么东西,就是这个刷新数据这个东西, 1.刷新数据这个东西,我们用的就是代理,再把代理相当于是再给大家复习一下,再把代理复习一下,顺便再说一下怎么刷新数据, 2.接下来,要实现一个什么功…

基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

day9 实现UDP通信

目录 socket函数拓展 UDP通信实现过程 代码实现 socket函数拓展 send与recv函数&#xff1a; /*用于发送数据*/ ssize_t send(int sockfd, const void *buf, size_t len,int flags);/*用于接收数据*/ ssize_t recv(int sockfd, void *buf, size_t len,int flags);/*前三个…

无敌0代码ESP8266接入homeassistant的新方法,完美解决新版homeassistant无法自定义MQTT设备的问题

记得之前想要在homeassistant中添加MQTT设备只要在配置文件 configuration.yaml 中配置如下代码即可 但是现在这种方法已经行不通&#xff0c;设备也步显示出来&#xff0c;这给很多homeassistant的忠实粉丝带来巨大不便&#xff0c;作为粉丝的一份子&#xff0c;我绝步允许这种…

Python进阶篇(四)-- ICMP Ping服务程序框架

Ping是一个网络应用程序&#xff0c;用于测试某个主机在IP网络中是否可访问。它也用于测试计算机的网卡或测试网络延迟。Ping的实现通常使用ICMP协议。ICMP协议在协议族中的地位如下图所示&#xff1a; 通过本文&#xff0c;你将更好地理解因特网控制报文协议&#xff08;ICMP&…

TCP协议的特性

目录 TCP协议的特性TCP的首部长度2.TCP如何实现可靠传输2.1 确认应答 2.2 超时重传3.建立连接3.1 三次握手3.2 四次挥手 4.滑动窗口5.流量控制6.拥塞控制7.延时应答8.捎带应答9.面向字节流10.异常情况1.进程关闭 /进程崩溃2.主机关机(正常流程关机)3.主机掉电 TCP协议的特性 TC…

预训练模型之BERT、Transformer-XL、XL-Net等

文章目录 预训练模型&#xff08;Pre-trained Models, PTMs&#xff09;前置知识BERTTransformer-XLXLNetTransformer-XL类似工作&#xff08;Scalable Transformer&#xff09;1. 《Scaling Transformer to 1M tokens and beyond with RMT》2. 《》 预训练模型&#xff08;Pre…

IPsec中IKE与ISAKMP过程分析(主模式-消息5和消息6)

IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息1&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息2&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息3&#xff09;_搞搞搞高傲的博客…

XML解析

XML在以后更多的是用来作为配置文件的。 一. 配置文件 什么是配置文件 用来保存程序在运行时需要的一些参数。 当配置信息比较复杂的时候&#xff0c;我们就可以用XML。 二. XML概述 三. XML的创建、语法规则 根标签就是写在最外面的标签。 <?xml version"1.0&quo…

[已成功]在mac上安装FFmpeg,详细全过程

记录一次痛苦的在mac上安装ffmpeg的过程 前言在 mac 上下载安装ffmpeg的试探之路1、从官方网站下载FFmpeg软件包2、选择用于macOS 64位的静态构建。这将使你重定向到evermeet.cx网站。3、通过 Homebrew 安装 FFmpeg3.1、在使用 Homebrew 安装的过程中可能会出现的问题3.1.1 墙的…

【MySQL】初识MySQL

数据库的重要性相信不需要我在这里着重强调了,这个专栏重点介绍的就是MySQL数据库,我所使用的版本为5.6,大致思路是先介绍MySQL的操作,然后再深入了解其底层原理,那就开始吧 目录 1.数据库相关概念2.MySQL数据模型3.SQL语法3.1 通用语法3.2 SQL语法分类3.3 DDL语句3.3.1数据库…

python读取与写入tif图片的完整信息

一、导入gdal包 在anconda环境下&#xff1a; conda install gdal 在其他环境下&#xff0c;去这个网站下载gdal包&#xff0c;直接使用pip install gdal是不行的 注意&#xff1a; 对于liunx用户&#xff0c;建议使用conda安装&#xff0c;对于win用户两者都可以。 使用方…

ChatGPT提示词工程(一):Guidelines准则

目录 一、说明二、安装环境三、Guidelines准则一&#xff1a;写出明确而具体的说明方法1&#xff1a;使用分隔符清楚地表示输入的不同部分方法2&#xff1a;用结构化输出&#xff1a;如直接要求它以HTML或者JSON格式输出方法3&#xff1a;请模型检查是否满足条件方法4&#xff…

深入理解计算机系统1--理解编译器编译的过程

前言 大家在学习C语言的时候&#xff0c;相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是&#xff1a;预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中&#xff0c;编译器究竟做了那些工作&#xff0c;它是如何让一份高级程序转换成机器语言的…