1、Dubbo:分布式服务治理框架 主要由四个主要组成部分,注册中心,生产者,消费者,监控中心
生产者的注册:
Dubbo支持四种注册中心,常用的只有Zookeeper与Redis,推荐使用Zookeeper,我们先启动我们的注册中心,当我们的服务启动的时候,我们会将接口全路径作为节点名称在Zookeeper上创建,还有创建一个子节点名称为providers,在provider下还会创建一个子节点,那就是rpc调用服务的接口地址;
消费者的订阅:
消费者在启动的时候,就会将根据接口的全路径从zookeeper中查找相应的provider,并且注册相应的节点变化的事件通知,可以在生产者服务出现异常的时候及时更新本地内存中的provider的信息;
消费者获取到调用地址,进行rpc调用访问接口;
在这个调用过程与结果被监控中心Monitor记录和监控;
2、Dubbo的优缺点
优点:
透明化的远程方法调用,只需要简单配置,不需要知道服务提供者地址,就可以像调用本地方法一样调用远程方法,并且实现了本地负载均衡与容错机制;
Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控管理,可以进行 多版本,多协议,多注册中心管理
缺点:只支持Java语言;
3、软负载与硬负载的区别:
软负载均衡是通过服务器上安装负载均衡软件或者使用本地负载均很算法实现负载均衡算法,例如Ngix,Ribbon
硬负载:F5负载均衡是硬件负载均衡的一种,硬件负载均衡,在服务器节点之间安装专门的硬件进行负载的工作;
4、SpringBoot整合Dubbo
生产者:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<curator-framework.version>4.0.1</curator-framework.version>
<zookeeper.version>3.4.13</zookeeper.version>
<dubbo.starter.version>0.2.0</dubbo.starter.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.starter.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
//tomcat端口号,http请求端口号
server:
port: 8080
dubbo:
application:
name: member
protocol:
name: dubbo
port: 20880
registry:
address: zookeeper://127.0.0.1:2181
scan:
base-packages: com.itmayiedu.api.member.impl
package com.itmayiedu.api.member.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.itmayiedu.api.member.MemberService;
@Service
public class MemberServiceImpl implements MemberService {
@Override
public String getUser() {
return "订单服务调用会员服务接口";
}
}
@EnableDubbo
@SpringBootApplication
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
消费者:
依赖相同,启动方式相同有两点不同,就是配置可以多个超时时间,还有就是接口注解@Service与@Refrence
server:
port: 8081
###dubbo 注册服务名称
dubbo:
application:
name: order
###dubbo服务地址
protocol:
name: dubbo
port: 20880
registry:
address: zookeeper://localhost:2181
consumer:
timeout: 5000
@RestController
public class OrderController {
@Reference
private MemberService memberService;
@RequestMapping("/orderToMember")
public String orderToMember() {
return memberService.getUser();
}
}
5、为什么会出现渐渐放弃Dubbo,更多的使用SpringCloud的趋势;
相同点:
都可以实现rpc远程调用框架,都可以实现服务的发现与治理;
不同点:
Dubbo的功能没有SpringCloud强大,因为Dubbo只是服务的注册与发现以及负载均衡,而SpringCloud还有服 务的保护Hystrix以及网关Zuul等功能;
SpringCloud是spring家族的产品,全世界应用较广,更新迭代的速度更快;