前言:
本人小白一枚,博客为自己学习时课后笔记,如有不足,请大佬们多多指教。
关于dubbo简介:
Dubbo的介绍
Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
Dubbo架构图简介
架构说明
关于虚线和实线:虚线表示异步,实现表示同步。异步不影响线程阻塞,同步必须等待响应结果才能继续执行,相对性能低。
Provider
提供者。编写持久层和事务代码.
Container
容器(spring)容器,Dubbo是基于spring实现的。
Registry
注册中心。放置所有Provider提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。
Consumer
消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以报页面等)。调用XXXXServiceImpl中的方法。
Monitor
监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。
执行流程
statr:启动spring容器时会启动Provider
register:将provider中相关信息注册到registry中
subscribe:Consumer从Registry中订阅Provider的信息
notify:通知给Consumer
invoke:Consumer根据Registry通知的信息进行调用Provider中方法。
count:Consumer和Provider把调用次数信息异步发送给Monitor进行统计。
搭建一个简单的Dubbo项目
整体结构如下:
api:负责提供对外的接口
provider:提供者
consumer:调用者
父项目DubboParent中Pom导入依赖项
4.0.0 com.cowain DubboParentpom 1.0-SNAPSHOT api provider consumer org.springframework.boot spring-boot-starter-parent2.1.10.RELEASE org.springframework.boot spring-boot-starter2.1.10.RELEASE org.springframework.boot spring-boot-starter-web2.1.10.RELEASE org.apache.dubbo dubbo-spring-boot-starter2.7.3 org.apache.curator curator-recipes4.2.0 org.apache.curator curator-framework4.2.0
api中代码结构:
provider结构:
Pom.xml
DubboParent com.cowain 1.0-SNAPSHOT 4.0.0 provider api com.cowain 1.0-SNAPSHOT org.springframework.boot spring-boot-starterorg.apache.dubbo dubbo-spring-boot-starterorg.apache.curator curator-recipesorg.apache.curator curator-framework
DubboServiceImpl
package com.cowain.service.impl;
import com.cowain.dubbo.service.DobbuService;
import org.apache.dubbo.config.annotation.Service;
@Service
public class DubboServiceImpl implements DobbuService {
@Override
public String testDemo(String param) {
System.out.println("执行demo");
return param+":hello";
}
}
apploication.xml
只要配置zookeeper的ip与端口
dubbo: application: name: dubbo-provider registry: address: zookeeper://192.168.153.129:2181 protocol: port: 20884
consumer结构:
Pom.xml
DubboParent com.cowain 1.0-SNAPSHOT 4.0.0 consumer api com.cowain 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-weborg.apache.dubbo dubbo-spring-boot-starterorg.apache.curator curator-recipesorg.apache.curator curator-framework
ConsumerController
package com.cowain.controller;
import com.cowain.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ConsumerController {
@Autowired
private ConsumerService consumerService;
@RequestMapping("/demo")
@ResponseBody
public String testDubboDemo(){
return consumerService.demo();
}
}
ConsumerServiceImpl
package com.cowain.service.impl;
import com.cowain.dubbo.service.DobbuService;
import com.cowain.service.ConsumerService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class ConsumerServiceImpl implements ConsumerService {
@Reference
private DobbuService dobbuService;
@Override
public String demo() {
return dobbuService.testDemo("李佳春");
}
}
ConsumerService
package com.cowain.service;
public interface ConsumerService {
public String demo();
}
ConsumerApplication
package com.cowain;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
apploication.xml
dubbo: application: name: dubbo-consumer registry: address: zookeeper://192.168.153.129:2181
测试:
zookeeper:
总结
代码虽然简单,但是得明白dubbo的执行流程,此篇博客仅供学习使用,如有不足,请多多指教。



