Dubbo(一)

一.架构的演进

1.什么是分布式系统:
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

基于多台计算机上的多个服务,来提供某一个完整的业务功能
2.架构的演进
单体架构 -> 垂直架构 -> 分布式架构 -> 流式架构

在这里插入图片描述

3.常见的RPC框架
1.dubbo		阿里在2011对外开源,后贡献给apache,并在GitHub上维护

2.HSF		阿里正在使用的框架

3.GRPC		谷歌的rpc框架

4.swift		Facebook的框架

。。。

二.Dubbo的介绍

1.Dubbo的体系结构

在这里插入图片描述

Provider:生产者(提供者)
Consumer:消费者
Registry:注册中心
Monitor:监控中心
init:
	0.生产者启动
	1.将生产者的信息注册到注册中心
	2.消费者启动,并去注册中心订阅指定服务
async:
	3.注册中心将订阅的提供者信息告诉消费者
sync:
	4.消费者直接调用生产者
async:
	5.将调用服务的信息保存到监控中心
2.RPC的原理

在这里插入图片描述

三.Dubbo的快速入门

1.下载并安装zookeeper
zookeeper是一个服务治理的中间件,原本是大数据Hadoop中的一个组件
https://downloads.apache.org/zookeeper/zookeeper-3.4.14/

解压:
	tar -zxvg zookeeper-3.4.14.tar.gz -C /usr/local
修改名字 为 zookeeper
修改配置文件
    cd /usr/local/zookeeper/conf/
    cp zoo_sample.cfg zoo.cfg
	修改zoo.cfg
		dataDir=/usr/local/zookeeper/data/
		clientPort=2181
启动zookeeper:
	cd /usr/local/zookeeper/bin/
	./zkServer.sh start
测试:
	./zkCli.sh
2.下载Monitor监控中心
1.github.com/apache/dubbo-admin/tree/master

2.git clone github.com/apache/dubbo-admin/tree/master

3.修改dubb-admin-server中的properties文件
	#修改如下配置改成注册中心也就是上面的端口号
	admin.registry.address=zookeeper://114.55.219.117:2181
	
4.采用mvn的方式,给dubbo-admin打包(dubbo-admin/dubbo-admin-server目录打开cmd)
5.使用java -jar 启动项目
6.默认占用了7001端口
7.localhost:7001
8.默认的用户名和密码都是root
3.编写生产者代码

1.创建项目
2.导入依赖

		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

<!--        链接zookeeper-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>   

3.编写service接口和实现类

public interface DemoService {
    String sayHello(String name);
}
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "hello"+name;
    }
}

4.编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!--    1.给服务起个名-->
    <dubbo:application name="dubbo-provider"/>
<!--    2.将zookeeper路径指定-->
    <dubbo:registry address="zookeeper://114.55.219.117:2181"/>
<!--    3.指定建立socket链接的端口号-->
    <dubbo:protocol name="dubbo" port="20880"/>
<!--    4.对外服务提供-->
    <dubbo:service interface="com.qf.service.DemoService" ref="demoService"/>
<!--    5.将DemoServiceImpl配置到spring容器中去-->
    <bean id="demoService" class="com.qf.service.impl.DemoServiceImpl"></bean>
</beans>

5.使用classpathxml加载配置文件启动

public class DubboProviderApplication {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:application-dubbo.xml");
        ac.start();
        System.in.read();
    }
}
4.编写消费者代码

1.创建项目
2.导入依赖(同上)
3.编写service接口和controller

public interface DemoService {
    String sayHello(String name);
}
public class DemoController {

    private DemoService demoService;

    public void setDemoService(DemoService demoService) {
        this.demoService = demoService;
    }

    public void sayHello(String name){
        System.out.println(demoService.sayHello(name));
    }
}

4.编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--取名-->
    <dubbo:application name="dubbo-consumer"/>
    <!--zookeeper地址-->
    <dubbo:registry address="zookeeper://114.55.219.117:2181"/>
    <!--生成远程服务代理,和生产者的service包名一致-->
    <dubbo:reference interface="com.qf.service.DemoService" id="demoService"/>
    <!--将controller交给spring去管理-->
    <bean class="com.qf.controller.DemoController" id="demoController">
        <property name="demoService" ref="demoService"/>
    </bean>
</beans>

5.使用classpathxml加载配置文件启动

public class DemoConsumerApplication {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:application-dubbo.xml");
        context.start();
        DemoController demoController = context.getBean(DemoController.class);
        demoController.sayHello("张三");
    }
}

6.调用指定方法测试
在这里插入图片描述
这里可以将两个项目中公共的api抽取出来放在另一个项目中,其他项目使用只需导入依赖即可

四.SpringBoot整合Dubbo

1.创建项目

1.dubbo-springboot-api	->	maven项目
2.dubbo-springboot-provider -> springboot项目
3.dubbo-springboot-consumer -> springboot项目

2.导入依赖

<!--和dubbo2.6兼容-->
		<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

3.配置生产者

1.服务的名称
2.zookeeper的地址
3.socket通讯协议和端口
4.对外提供的服务
	在实现类上添加注解	@service(dubbo中的注解)
5.在启动类上添加注解	@EnableDubbo

application.yml

server:
  port: 8080

dubbo:
  #服务名称
  application:
    name: dubbo-springboot-provider
  registry:
    #zookeeper地址
    address: zookeeper://114.55.219.117:2181
  protocol:
    #socket的协议和端口
    name: dubbo
    port: 

实现类:

@Service
public class DemoServiceImpl implements DemoService {

    @Override
    public String sayHaHaHa() {
        return "哈哈哈哈哈哈哈哈哈额";
    }
}

4.配置消费者:
application.yml

dubbo:
  application:
    name: dubbo-springboot-consumer

  registry:
    address: zookeeper://114.55.219.117:2181
#修改端口,防止冲突
server:
  port: 80

controller

@RequestMapping("/demo")
public class DemoController {

    @Reference
    private DemoService demoService;

    @GetMapping(value = "/hhh",produces = "text/html;charset-utf-8")
    public String hhh(){
        String str = demoService.sayHaHaHa();
        return str;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值