三种架构

单一架构

当网站流量很小的时候我们将所有的应用(业务)放到一台服务器上,打包运行公司管理系统/超市收银系统
优点:开发简单,部署简单
缺点:扩展不容易(怎么处理日益增长的流量),谁都改一个,维护不容易,性能提升难

垂直架构

将大应用拆分成为小应用(一般按照业务拆分),根据不同的访问频率决定各自业务部署的服务器数量
优点:扩展容易
缺点:页面一改,可能造成整个项目重新部署,业务和界面没有分离开,随着业务种类增加,怎么解决业务之间的互相调用问题,订单服务器和用户服务器交互效率的问题

分布式架构

将业务拆分后,用某种方式实现各个业务模块的远程调用和复用,这时一个好的RPC框架就决定了你的分布式架构的性能,怎么调用,何时调用服务器挂了怎么…我们需要- -个框架来帮我们解决这个问题(当然大大神可以自己写一个,但是应对大流量的成功者莫过于中国的阿里巴巴公司,顶住了淘宝双十一的流量,反观- -些学校内部的选课系统,对于大流量时只有两个字–宕机)。

直连方式

创建pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gizzard</groupId><artifactId>link_userservice_provider</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
</project>

创建User类

package com.gizzard.model;public class User {private Integer id;private String UserName;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return UserName;}public void setUserName(String userName) {UserName = userName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

创建UserService和实现类

package com.gizzard.service;import com.gizzard.model.User;public interface UserService {User queryUserById(Integer id);
}
package com.gizzard.service.impl;import com.gizzard.model.User;
import com.gizzard.service.UserService;public class UserServiceImpl implements UserService {@Overridepublic User queryUserById(Integer id) {User user = new User();user.setUserName("zhangsan");user.setAge(21);user.setId(001);return user;}
}

dubbo-userservice-provider.xml配置文件

<?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内部使用的唯一标识--><dubbo:application name="001-link-userservice-provider"/>
<!--    访问服务协议的名称和端口号,dubbo官方推荐使用的是dubbo协议,端口号默认为20880-->
<!--    name:指定协议名称port:指定协议端口号
--><dubbo:protocol name="dubbo" port="20880"/>
<!--    暴露服务的接口interface:暴露服务接口的全限定名称ref:接口使用的实现类在spring容器中的标识registry:如果不使用注册中心则值为N/A,表示空
--><dubbo:service interface="com.gizzard.service.UserService" ref="userService" registry="N/A"/>
<!--    将接口的实现类加载到spring容器中,使dubbo:service中ref能够引用UserService的接口实现类--><bean id="userService" class="com.gizzard.service.impl.UserServiceImpl"/>
</beans>

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:dubbo-userservice-provider.xml</param-value></context-param><!--    监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

完成上面内容打成jar包发送到本地仓库
(将提供者的pom文件中的<packaging>war</packaging>先注释掉,然后用右边maven工具的install打成jar包)

创建服务消费者link-consumer

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.gizzard</groupId><artifactId>link-consumer</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><dependency><groupId>com.gizzard</groupId><artifactId>link_userservice_provider</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

配置dubbo-consumer.xml

<?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="link-consumer"/>
<!--    引用远程服务接口:id:远程服务接口对象名称interface:调用远程接口的全限定类名url:访问服务接口的地址(dubbo类似于http 是协议名称)registry:不使用注册中心,值为:N/A
--><dubbo:reference id="userService"interface="com.gizzard.service.UserService"url="dubbo://localhost:20880"registry="N/A"/>
</beans>

配置application.xml

<?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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="org.gizzard.web"/><mvc:annotation-driven/><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--指定视图文件所在位置--><!--前缀,指视图文件定义在view文件夹下--><property name="prefix" value="/WEB-INF"/><!--视图文件名的后缀--><property name="suffix" value=".jsp"/></bean>
</beans>

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:application.xml,classpath:dubbo-consumer.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

userDetail.jsp

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2021/10/21Time: 17:29To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>用户详情</title>
</head>
<body>
<h1>用户详情</h1>
<div>用户标识#{user.id}</div>
<div>用户名称#{user.userName}</div>
</body>
</html>

UserController

package org.gizzard.web;import com.gizzard.model.User;
import com.gizzard.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class UserController {@Autowiredprivate UserService userService;@RequestMapping("/user")public String userDetail(Model model, Integer id){User user = userService.queryUserById(id);model.addAttribute("user",user);return "userDetail";}
}

测试

tomcat部署两个模块启动
输入地址http://localhost:8080/user?id=11

10.21-Dubbo笔记相关推荐

  1. 10.21.2010吉他课笔记

    10.21.2010吉他课笔记 1.用脚打拍子 2.大横按先横按再放置其他手指,否则总会慢半拍 3.大拇指放在指板上方,C G Em和弦转换大拇指不动,用最小的位移完成 4.扫弦手势,从根音扫起,重拍 ...

  2. dubbo笔记+源码刨析

    会不断更新!冲冲冲!跳转连接 https://blog.csdn.net/qq_35349982/category_10317485.html dubbo笔记 1.概念 RPC全称为remote pr ...

  3. 古月居ROS入门21讲笔记

    ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...

  4. Java核心卷Ⅱ(原书第10版)笔记(上)

    Java核心卷Ⅱ(原书第10版)笔记(上) 写在最前面,个人认为,卷Ⅱ更适合当手册使用,更多的是讲API的使用,前两章内容比较实际,要是合并到卷一就好了. 文章目录 第1章 Java SE 8 的流库 ...

  5. Dubbo笔记 ㉓ :Dubbo协议与网络传输

    文章目录 一.前言 二. Dubbo 协议 三. 编解码器的注入 1. 消费者的注入时机 2. 提供者的注入时机 四.NettyCodecAdapter 1. InternalEncoder 1.1 ...

  6. 张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器

    张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器 原文:张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器 BH1750FVI 是一款 ...

  7. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字

    Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字 题目 代码 结果 题目 都在上面 代码 import java.math.B ...

  8. 张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231

    原文:张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/ ...

  9. Dubbo笔记 ⑤ : 服务发布流程 - Protocol#export

    文章目录 一.前言 二.RegistryProtocol#export 1. URL解析 1.1 获取注册中心URL 1.2 获取服务URL 1.3 获取订阅URL 2. 服务暴露 3. 服务注册 4 ...

  10. Dubbo笔记 ㉗ : 服务自省-提供者

    文章目录 一.前言 1. 概念 二.服务自省 1. 相关配置 3.1 dubbo.application.metadata-type 3.2 dubbo.application.register-co ...

最新文章

  1. ARM Linux 基于S3C2451的AD9833波形发生器/Linux字符驱动的理解
  2. github使用教程及小问题
  3. arcgis建立拓扑分析(检验矢量图)
  4. matlab井深测量,一种井深测量系统及方法与流程
  5. sass 基础——回顾
  6. Peoplesoft取Translate Value标签值的方法
  7. webservice使用EF生成的model序列化问题
  8. Android Studio自动排版的两种方法
  9. 升级插件_全新界面全面升级不能错过 摄影后期插件 CameraRaw12.3 最新版
  10. 14:统计素数并求和
  11. 借助 Material You 动态配色丰富您的应用
  12. Latex公式编辑快速入门
  13. 程序猿如何更好地指导自己处于什么水平,还有各个阶段应该学习什么
  14. 今日头条用户搜索“室内设计”显示的自媒体粉丝数量及分布情况统计(2020.1.8)
  15. uniapp弹窗滚动阻止外部滚动
  16. 关于Mysql服务无法启动的问题
  17. 安装opensuse的笔记-重庆linux开源组织
  18. C语言class 1:初识与准备
  19. 新能源汽车:选择“内卷”还是抓住大势东风?
  20. 国企银行秋招不完全指南

热门文章

  1. mac安装nvm管理多版本node环境
  2. 搞清楚字符编码05-万国码[1]
  3. 发送请求时,postman正常,微信小程序失败?
  4. iphoneX h5安全区域的问题
  5. python实现对比两个有增减的excel表格的不同并填充不同颜色
  6. Nova API简单介绍
  7. session共享问题
  8. vex机器人 亚洲公开赛_VEX机器人亚洲公开赛工程笔记大公开:华硕商用赋能青少年科学梦想...
  9. MySQL多表连接查询——等值连接、非等值连接和自连接
  10. vscode 配置php环境