SpringBoot + Dubbo + zookeeper实现

ops/2024/10/18 16:54:44/

目录

一,框架搭建

1. 启动zookeeper !

2. IDEA创建一个空项目;

3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可

4.项目创建完毕,我们写一个服务,比如卖票的服务

编写接口

编写实现类

编写service

二,服务提供者

1,第一步 

zookeeper的包我们去maven仓库下载,zkclient;

【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖;

dubbo%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7%EF%BC%81-toc" style="margin-left:80px;"> 在springboot配置文件中配置dubbo相关属性!

dubbo%E4%B8%AD%E7%9A%84%E6%B3%A8%E8%A7%A3%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AFspring%E7%9A%84%E6%B3%A8%E8%A7%A3%2C%E6%89%80%E4%BB%A5%E8%A6%81%E6%8A%8A%E5%85%B6%E6%B3%A8%E5%85%A5%E5%B0%B1%E8%A6%81%E7%94%A8Componet%EF%BC%8C%E4%B8%8D%E8%BF%87%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E7%9A%84%E5%A5%BD%E5%83%8F%E5%B7%B2%E7%BB%8F%E8%A7%A3%E5%86%B3%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%EF%BC%9A%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E6%B3%A8%E8%A7%A3%40DubboService-toc" style="margin-left:80px;"> 在service的实现类中配置服务注解,发布服务!注意导包问题,因为这里的Service注解需要导入的是dubbo中的注解,而不是spring的注解,所以要把其注入就要用Componet,不过最新版本的好像已经解决这个问题:一个新的注解@DubboService

三,服务消费者

1.导入依赖,和之前的依赖一样;

2.配置参数

3.本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

4,完善消费者的服务类

5.测试类编写

四,微服务架构问题:

分布式架构会遇到的四个核心问题:

解决方案:


一,框架搭建

1. 启动zookeeper !

2. IDEA创建一个空项目;

3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可

4.项目创建完毕,我们写一个服务,比如卖票的服务

编写接口
package com.guo.provider.service;public interface TicketService {public String getTicket();
}
编写实现类
package com.guo.provider.service;public class TicketServiceImpl implements TicketService {@Overridepublic String getTicket() {return "《狂神说Java》";}
}

5.创建一个模块,实现服务消费者:consumer-server , 选择web依赖即可

6.项目创建完毕,我们写一个服务,比如用户的服务;

编写service
package com.guo.consumer.service;public class UserService {//我们需要去拿去注册中心的服务
}
二,服务提供者

1,第一步 

将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包

我们从dubbo官网进入github,看下方的帮助文档,找到dubbo-springboot,找到依赖包

<!-- Dubbo Spring Boot Starter -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version>
</dependency>

zookeeper的包我们去maven仓库下载,zkclient;

<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<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>

dubbo%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7%EF%BC%81"> 在springboot配置文件中配置dubbo相关属性!

#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.guo.provider.service

dubbo%E4%B8%AD%E7%9A%84%E6%B3%A8%E8%A7%A3%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AFspring%E7%9A%84%E6%B3%A8%E8%A7%A3%2C%E6%89%80%E4%BB%A5%E8%A6%81%E6%8A%8A%E5%85%B6%E6%B3%A8%E5%85%A5%E5%B0%B1%E8%A6%81%E7%94%A8Componet%EF%BC%8C%E4%B8%8D%E8%BF%87%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E7%9A%84%E5%A5%BD%E5%83%8F%E5%B7%B2%E7%BB%8F%E8%A7%A3%E5%86%B3%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%EF%BC%9A%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E6%B3%A8%E8%A7%A3%40DubboService"> 在service的实现类中配置服务注解,发布服务!注意导包问题,因为这里的Service注解需要导入的是dubbo中的注解,而不是spring的注解,所以要把其注入就要用Componet,不过最新版本的好像已经解决这个问题:一个新的注解@DubboService

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;@Service //将服务发布出去
@Component //放在容器中
public class TicketServiceImpl implements TicketService {@Overridepublic String getTicket() {return "《狂神说Java》";}
}

逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中!

三,服务消费者

1.导入依赖,和之前的依赖一样;

<!--dubbo-->
<!-- Dubbo Spring Boot Starter -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version>
</dependency>
<!--zookeeper-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version>
</dependency>
<!-- 引入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>

2.配置参数

#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

3.本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

4,完善消费者的服务类
 

package com.guo.consumer.service;import com.guo.provider.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;@Service //注入到容器中
public class UserService {@Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名TicketService ticketService;public void buyTicket(){String ticket = ticketService.getTicket();System.out.println("在注册中心买到"+ticket);}}

5.测试类编写

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerServerApplicationTests {@AutowiredUserService userService;@Testpublic void contextLoads() {userService.bugTicket();}}

四,微服务架构问题:

分布式架构会遇到的四个核心问题:

1.这么多的服务,客户端该如何去访问?
2.这么多的服务,服务器之间如何进行通信?
3.这么多的服务,该如何管理和治理?
4.服务挂了,怎么办?

解决方案:

SpringCloud,是一套生态,就是来解决以上分布式架构的四个问题

想使用SpringCloud,必须要掌握Springboot,因为它是基于SpirngBoot的

1.SpringCloud NetFlix,出了一套解决方案

2.Apcahe Dubbo zookeeper 第二套解决方案

API:没有,要么找第三方,要么自己实现

Dubbo是一个高性能的基于java实现的RPC通信框架

服务注册与发现,zookeeper,没有熔断机制,接住了Hystrix


http://www.ppmy.cn/ops/21110.html

相关文章

MySQL数据库总结

作者&#xff1a;爱塔居-CSDN博客 专栏&#xff1a;数据库 目录 前言 一、数据库操作 1.1 创建数据库 1.2 显示当前数据库 1.3 使用数据库 1.4 删除数据库 二、表的操作 2.1 查看表结构 2.2 创建表 2.3 删除表 三、表的增删改查操作&#xff08;CRUD) 3.1 新增 3.…

项目记录:一个C语言模拟操作系统的程序(1)

记录一个我的C语言做的非常简单的小项目&#xff0c;本大冤种帮一个上大一的远房堂弟&#xff08;不知道叫堂还是表了&#xff0c;反正是我妈亲戚家的&#xff09;做的课程设计&#xff0c;要求做的是一个字符图形界面的操作系统模拟。等他答辩完&#xff0c;无偿贡献给大家~给…

WEB攻防-.NET特性常见漏洞

目录 前置知识&#xff1a; DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例&#xff1a; 验证代码文件有没有可以绕过&#xff08;Cookie&Session&…

华为昇腾AI云服务:让每个人轻松实现个人专属大模型

随着人工智能技术的飞速发展&#xff0c;大型模型的训练和部署变得日益普遍。然而&#xff0c;要实现个人定制的大型模型往往需要巨大的计算资源和专业知识。在这个背景下&#xff0c;昇腾AI云服务的出现为每个人提供了便捷的途径&#xff0c;让个人用户也能够轻松地实现个人专…

2024/4/24总结

js进阶 作用域 作用域分为全局作用域和局部作用域 局部作用域 分为块级作用域&#xff08; 就是使用 {} 包裹起来的代码称为代码块 &#xff09;和函数作用域&#xff08; 顾名思义就是函数包裹的部分 &#xff09; let 和 const 声明的常量会产生块级作用域 var不会产生…

java8 Stream流常用方法(持续更新中...)

java8 Stream流常用方法 1.过滤数据中年龄大于等于十八的学生2.获取对象中其中的一个字段并添加到集合(以学生姓名&#xff08;name&#xff09;为例)3.获取对象中其中的一个字段并转为其他数据类型最后添加到集合(以学生性别&#xff08;sex&#xff09;为例&#xff0c;将Str…

Java、Tomcat、Apache HTTP Server以及浏览器服务器的关系

一.浏览器服务器有哪些 浏览器服务器是指在互联网上扮演服务器角色的设备或程序&#xff0c;用于响应浏览器发出的请求并向浏览器返回相应的数据。 常见的浏览器服务器有以下几种&#xff1a; Apache HTTP Server&#xff1a;这是世界上最常用的web服务器软件之一&#xff0c;…

Android Room使用模板

1&#xff0c;引入依赖 plugins {id kotlin-kapt } dependencies {implementation "androidx.room:room-runtime:2.4.2"kapt "androidx.room:room-compiler:2.4.2" } 2&#xff0c;标记实体类 import androidx.room.Entity import androidx.room.PrimaryKe…