仅用5分钟极速入门Dubbo使用教程
作者:Java识堂 发布时间:2022-08-08 12:08:55
目录
Dubbo是什么?
Dubbo能做什么?
介绍
Api模块实现
producer模块实现
consumer模块实现
Dubbo是什么?
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了Dubbo就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)
其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo能做什么?
1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
介绍
在使用Dubbo开发时,我们一般将项目分为如下3个模块
api:将服务提供者和服务消费者都需要用到的接口放在api层
consumer:服务消费者
producer:服务提供者
假如有如下一个场景,我们需要查询用户的信息,用户请求发送到consumer这个服务,然后consumer这个服务调用producer这个服务获取到用户信息,并返回给用户
Api模块实现
用户信息封装到UserInfo类中,因为需要网络传输,所以需要实现序列化接口
public class UserInfo implements Serializable {
private String userId;
private String phoneNum;
private String userAddress;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}
用户信息接口,producer模块写这个接口的实现,consumer模块写这个接口的调用
producer模块实现
我们只需要引入对应的starter和zookeeper模块即可方便的使用dubbo
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.6</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
producer模块写接口的实现即可
@Service
public class UserServiceImpl implements UserService {
@Override
public UserInfo hello(String username) {
UserInfo userInfo = new UserInfo();
userInfo.setUserId("10");
userInfo.setPhoneNum("15810554635");
userInfo.setUserAddress("北京昌平");
return userInfo;
}
}
需要注意的一点是@Service注解是dubbo中的,初学者容易导入成spring框架的@Service,导致服务导出失败
import org.apache.dubbo.config.annotation.Service;
启动类上需要加上@EnableDubbo注解
@EnableDubbo
@SpringBootApplication
public class ProducerApp {
public static void main(String[] args) {
SpringApplication.run(ProducerApp.class, args);
}
}
application.yaml
server:
port: 8081
spring:
application:
name: springboot-dubbo-producer
dubbo:
registry:
# 注册中心地址及协议
address: zookeeper://myhost:2181
在application.yaml指定服务启动的端口,服务名字和注册中心的地址
consumer模块实现
consumer端只需要在需要调用的接口上加上@Reference注解,即可调用到producer端
@RestController
public class UserController {
@Reference(check = false)
private UserService userService;
@RequestMapping("hello")
public UserInfo hello(@RequestParam("id") String id) {
return userService.hello(id);
}
}
@Reference中check=false表示启动的时候不去管UserService服务是否能正常提供服务,这个值默认为true,表示当UserService不能提供服务时,会导致consumer端启动失败
application.yaml
server:
port: 8080
spring:
application:
name: springboot-dubbo-consumer
dubbo:
registry:
protocol: zookeeper
address: myhost:2181
同样在application.yaml指定服务启动的端口,服务名字和注册中心的地址
curl http://localhost:8080/hello
{
"userId": "10",
"phoneNum": "158****4635",
"userAddress": "北京昌平"
}
可以看到使用RPC框架后,调用远程方法和调用本地方法一样简单
本文github地址:https://github.com/erlieStar/dubbo-learning
来源:https://blog.csdn.net/zzti_erlie/article/details/117324153


猜你喜欢
- 本文实例为大家分享了Android开发实现抽屉菜单的具体代码,供大家参考,具体内容如下实现效果点击菜单图表即可进入抽屉代码实现1、打开app
- 本文实例为大家分享了Android本地实现搜索历史记录的具体代码,供大家参考,具体内容如下一.自定义搜索历史记录本地实现搜索历史记录有很多种
- 前言本篇文章会说下如何使用并且要用麻烦的自定义 view 去实现时间轴效果,以及如何分析、实现自定义 view。 需要具备的知识:Paint
- 1.什么是单例模式?所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对
- 经过上一篇的介绍,相信小伙伴们已经按奈不住内心对springboot的向往,本篇我将继续向小伙伴介绍springboot配置文件的配置,已经
- Lombok有什么用在我们实体Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不会用到,但是某
- 这篇文章主要介绍了SpringCloud断路器Hystrix原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 在Java项目开发中,Maven是我们最常用的依赖管理和构建工具了!我们常常通过添加dependency节点,就能够很方便地加入依赖,而不需
- 项目开发中为了保护用户隐私安全,一般都会用MD5进行密码加密以下就简单举例SpringBoot 实现Mysql使用MD5进行密码加密做一个简
- 我最近在研究Spring框架的路上,那么今天也算个学习笔记吧!学习一下如何实现Bean的装配方法Bean的简介Java开发者一般会听过Jav
- 本文实例为大家分享了Android自定义双向滑动控件的具体代码,供大家参考,具体内容如下先看一下效果图1.SeekBarPressure工具
- 前言WebJar官网:https://www.webjars.org/,对于任何与Servlet 3兼容的容器,WEB-INF/lib目录中
- 前言记得前段时间的文章么?redis使用位图法记录在线用户的状态,还是需要自己实现一个IM在线用户状态的记录,今天来讲讲另一方案,布隆过滤器
- 本文实例讲述了Android实现ListView异步加载的方法。分享给大家供大家参考,具体如下:@Override publi
- 本文实例为大家分享了java实现简单斗地主的具体代码,供大家参考,具体内容如下第一种方法 /** * @param args */ /**
- 本文实例为大家分享了Java图片验证码代码,供大家参考,具体内容如下网页显示效果:index.jsp 使用两种方式强制图片更新: 1、设置图
- 本文实例为大家分享了Android实现ViewPager无限循环的具体代码,供大家参考,具体内容如下方式一:实现原理:假设有3张图片,分别是
- 引言在之前的文章里,我们聊到了 Java 标准库中 HashMap 与 LinkedHashMap 的实现原理。HashMap 是一个标准的
- 一、背景说明由于以前在项目中一直使用sqlmap.xml进行mybatis语句的编写和实现,其xml实现动态更新和查询较为方便,而目前由于技
- java继承1.Object类的常用方法方 * 能public Boolean equals(Object obj)判断两个对象变量所指向的是