美年旅游项目自记录Day01

一、技术栈Dubbo学习

 

1.架构演变

  • 软件架构演变,单体架构——>垂直架构——>SOA架构——>微服务架构
  • 单体架构(all in one):一个归档包(war, jar)包含了应用所有功能的应用程序,我们通常称之为单体应用,架构单体应用的方法论,为单体应用架构。 开发成本低,周期短,适合小型项目,但代码耦合度高,代码量逐渐增多(外包屎山警告),扩展难,不易维护。
  • 垂直架构:按照业务的维度进行功能的划分,形成小的单体项目,即单体与单体之间垂直划分, 而单体内又可进行水平划分(表现层,业务逻辑层,持久层),适合于访问量小,用户数不多的业务。但依然是耦合高,功能与数据冗余。
  • SOA架构(面向服务的架构):抽象出服务,使之通用而实现业务的快速复用,ESB(企业服务总线)负责连接各个服务节点,进行不同服务间的消息转化解释和路由工作。服务影响系统,且服务共性的确定及抽取的难度较大
  • 微服务:基于SOA的基础,将服务进行细分,通过服务网关(拦截器)对服务组件进行选择。服务组件越多,维护的成本越大,不同的服务所需的技术不同(成为大牛),挑战难度高。

2.Dubbo初识

socket网络编程

RPC:远程调用

在spring的xml配置文件中,配置zookeeper的服务注册和订阅信息

服务注册代码:

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/mvc
         http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://code.alibabatech.com/schema/dubbo
         http://code.alibabatech.com/schema/dubbo/dubbo.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
    <dubbo:application name="dubbodemo_provider" />
    <!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!-- 注册  协议和port   端口默认是20880 -->
    <dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
    <!-- 扫描指定包,加入@Service注解的类会被发布为服务  -->
    <dubbo:annotation package="com.fionn.service.impl" />
</beans>

服务订阅代码:

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/mvc
			http://www.springframework.org/schema/mvc/spring-mvc.xsd
			http://code.alibabatech.com/schema/dubbo
			http://code.alibabatech.com/schema/dubbo/dubbo.xsd
			http://www.springframework.org/schema/context
			http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
    <dubbo:application name="dubbodemo_consumer" />
    <!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!-- 扫描的方式暴露接口  -->
    <dubbo:annotation package="com.fionn.controller" />
    <!-- 运行dubbo不检查提供者是否提前开启  -->
    <!-- <dubbo:consumer check="false"></dubbo:consumer> -->
</beans>

服务注册与订阅需要借助zookeeper注册服务器间接交互,也可以二者直接进行交互,zookeeper注册服务器进行集群可解决单机宕机问题。

此过程需要将服务提供模块的服务接口复制一份给服务消费模块,有没有更好的方法?

进行代码重构,将接口单独抽出为一个模块

 通过pom.xml添加此接口模块的dependence即可

可通过Dubbo_Admin控制台可视化提供者与消费者的相关信息

 相当于在Tomcat中部署一个管理中心的 war应用

3.Dubbo相关配置说明

  • 包扫描,扫描Dubbo包的@Service注解以及@Reference引用注解
<dubbo:annotation package="com.fionn.service" />
  • 协议

Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等

dubbo协议采用单一长连接和NIO异步通讯,适用于小数据量高并发的服务调用

可在同一个工程配置多个协议

<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
  • 启动时检查
<dubbo:consumer check="false" />

4.负载均衡

将请求分摊到多个操作单元上进行执行,从而共同完成工作任务,相关算法(随机、轮询、最少活跃调用数、一致性Hash),Dubbo默认随机调用。力求手撕

5.集成事务问题

注解扫描的时候没有扫描到事务切面的代理类(代理类没有加注解),导致服务没有发布成功

解决方法:

在spring配置文件中的事务控制的注解支持标签中,对proxy-target-class属性赋true,采用Cglib代理增加事务切面操作。Cglib代理是基于继承的,翻译成人话为创建的代理类是目标类的子类,并对Service注解的interface属性赋值接口的反射——@Service(接口名.class)

这可理解为一种多态,代理类——>实现的接口

<tx:annotation-driven transaction-manager="transactionManager" proxy-tartget-class="true" />

更多详情,请通过官方文档的快速开始,进行教程上手

Dubbo官方中文文档

二、项目环境搭建

所需技术Dubbo(分布式远程调用)、zookeeper、Vue(页面开发)、ElementUI(页面开发)、SpringSecurity(权限框架)、Echart(百度框架-图表)、Redis(缓存)、SSM

1.项目结构

  • 父工程
  • 子工程 工具类
  • 子工程 实体类
  • 子工程 Dao类
  • 子工程 接口方法
  • 子工程 Service类
  • 子工程 表现层
  • 测试

然后可以开始愉快痛苦地进行配置文件的配置

Guess you like

Origin blog.csdn.net/m0_49575554/article/details/121504611