soa架构-Dubbo架构,框架,技术的使用

dubbo的介绍

 

推荐使用zookeeper。

dubbo开发微服务,有启动的先后顺序的,要先启动服务提供者

zookeerper挂掉了,服务消费者依然能调用服务提供者,因为服务消费者第一次再注册中心拉取到服务后,会做本地缓存,只要不重启消费者就可一致调用;重启会有启动时检查,所以重启后就启动不了了

去dubbo的管理控制台卡伊查看日志

启动时检查配置  check属性 是全局和局部的并且(有false就是false,不去检查提供者),但是对于单个的和全部的是单个优先

 结果缓存: 如果不再引用提供者接口实现类的时候加cache属性,那每次都会调用提供者

但是直接在这上面加,这就是所有实现类的方法都会做缓存,但我们只需要查询做缓存

注意事项:    一定要把linux的防火墙关闭 systemctl stop firewalld

      还要记得开启zookeeper       ./zkServer.sh start.

      dubbo是基于socket协议/dubbo协议的,所以在进行pojo(实体类及其模板类)传输的时候报了异常,因为pojo没有实现序列化接口,就无法进行基于二进制的序列化传输

      所以当你用mybatis的逆向工程生成实体类及其模板类(里面有4个类的都序列化)的时候得手动实现序列化
一。前引
软件构架的发展过程:
集中(单一)式架构(单体应用)---》垂直架构---》分布式架构---》流动计算架构(SOA)

集中式架构:就一个tomcat,所有功能部署在一起。。不能高并发
垂直架构:多个tomcat, 分成多个项目,项目与项目之间的存在数据冗余,耦合性较大
分布式架构:多个tomcat,将核心公共通用的业务抽取出来,作为独立的服务
分布式以后,web层和业务层分开成两个项目(不同的tomcat)
分布式架构最主要的特点就是远程调用
调用关系错综复杂
流动计算(SOA)架构:在分布式计算架构下,添加了监控中心与注册中心。


二。Dubbo
1.概念:Dubbo可以实现基于SOA架构的软件设计,是一种架构,是一款高性能的Java RPC框架。
Dubbo是可以和Spring框架无缝集成
Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用
dubbo协议高效的原因:单一长连接和NIO异常通讯
与http协议的区别就是更加高效

可以与CXF框架(webservice)比较:https://www.cnblogs.com/lanto/p/13285102.html


2.图形原理:

3.Dubbo架构设计的元素:服务提供方,服务消费方,注册中心,监控中心,抽取出的公共业务

3.1注册中心:
存储的是 提供方提供的自己地址字符串。
注册中心是依靠Zookeeper(简称zk)树型目录服务。分为两种,一种是linux版本的,一种是windows版本的
对于windows版,直接D:Astudy软件语言Javajava就业班项目一7.saax-export_day073.资料和工具1 zookeeperwindows版zookeeperzookeeper-3.4.6in 点击zkServer.cmd
对于linux版,把D:Astudy软件语言Javajava就业班项目一7.saax-export_day073.资料和工具1 zookeeperlinux版zookeeper下的压缩包拖入linux虚拟机

3.2服务提供方

相当于service层,
所以要有对应seviece接口和实现类

添加依赖,编写dubbo-provider.xml,编写web.xml用来监控dubbo-provider.xml
注意在实现类上加@Service(阿里巴巴的),这个注解是用来生成实现类的动态代理),这个注解是用来生成实现类的动态代理
而在springmvc用的@Service是从ioc容器里面取出的

日志配置文件放进去
部署tomcat的时候,记得改端口号,防止和8080相撞

运行tomcat,不报错就是正常


3.3服务消费方
相当于web层
添加依赖,编写dubbo-consumer.xml,编写web.xml去连接dubbo-consumer.xml
只需要编写和service层一样包结构的接口
配置控制器,控制器里面使用@Reference去引入service项目的服务接口
tomcat部署改端口号,在运行

3.4抽取出的公共业务
就是接口,抽取出来,包结构要一样
所以service是剩下实现类,web剩下控制器

3.5 监控中心 一般是给运维团队用

扩展:
1.我们测试的时候,可以用main函数启动服务

public class CompanyProvider {

    public static void main(String[] args) throws IOException {
        //1.加载配置文件
        ClassPathXmlApplicationContext
                 cxt = new ClassPathXmlApplicationContext("classpath*:spring/applicationContext-*.xml");
        //2.启动
        cxt.start();
        //3.阻塞,让程序继续运行下去
        System.in.read();

    }

}

  


2.为集群的服务器分配请求的算法是负载均衡
负载均衡:random(随机,默认), roundrobin(轮询), leastactive(最少活跃调用数)
配置负载均衡策略,既可以在服务提供者一方配置,也可以在服务消费者一方配置
//在服务消费者一方配置负载均衡策略
@Reference(check = false,loadbalance = "random")
//在服务提供者一方配置负载均衡
@Service(interfaceClass = HelloService.class,loadbalance = "random")


3.Dubbo服务调用超时时间
原因:dubbo服务调用时间默认为1秒,且超过指定的时间调用服务还没有结束的话就自动重试2次。
解决:在提供方或者消费方一方就行修改就行
//在提供方,@Service(timeout=10000)
//在消费方,@Reference(timeout=10000)

一个Java开发的菜鸟
原文地址:https://www.cnblogs.com/lanto/p/13226953.html