jsp调⽤controller⽅法_RPC调⽤_服务注册与发现
RPC调⽤_单体架构_SOA架构
系统架构的演变
1 传统的单体架构
1.1 什么是单体架构
⼀个归档包(例如 war 格式或者 Jar 格式)包含了应⽤所有功能的应⽤程序,我们通常称之 为单体应⽤。也称之为单体应⽤架构,这是⼀种⽐较传统的架构风格。
1.2 单体架构优点
便于开发:只需借助 IDE 的开发,调试功能即可完成 易于测试:只需要通过单元测试或浏览器即可完成测试 易于部署:打包成单⼀可执⾏ jar 或者 war 包,完成 jar 或者 war 部署即可
1.3 单体架构缺点
复杂性⾼
复杂性⾼:整个项⽬包含的模块⾮常多,模块的边界模糊,依赖关系不清晰,代码质量参差 不齐,整个项⽬⾮常复杂,修改⼀个 BUG 都会造成隐含的缺陷。
部署速度逐渐变慢:随着代码的增加,构建和部署的时间也会增加。⽽在单体应⽤中,每次 功能的变更或缺陷的修复都会导致我们需要重新部署速度逐渐变慢
部署整个应⽤。
扩展能⼒受限:单体应⽤只能作为⼀个整体进⾏扩展,⽆法结合业务模块的特点进⾏伸缩。
扩展能⼒受限
阻碍技术创新: 单体应⽤往往使⽤统⼀的技术平台或⽅案解决所有问题,团队的每个成员都 必须使⽤相同的开发语⾔和架构,想要引⼊新的框架或技术平台⾮常困难。
2SOA 架构(重点理解)
2.1 什么是 SOA 架构
SOA 是 Service-Oriented Architecture 的英⽂缩写,就是⾯向服务的架构。这⾥的服务可以理 解为 service 层业务服务。将系统拆分为不同的服务单元,通过⽹络协议服务单元之间进⾏ 通信。服务单元完成⼀个特定功能(如:验证、⽀付、登录等等),通过服务单元之间的集成 组成完整的应⽤程序。
SOA 架构中由两个重要的⾓⾊:
服务提供者(Provider)和服务使⽤者(Consumer)
2.2SOA 架构的优点
更易维护:业务服务提供者和业务服务使⽤者的松散耦合关系。当需求发⽣变化的时候,不 需要修改提供业务服务的接⼝,只需要调整业务更易维护
服务流程或者修改操作即可,整个应⽤系统 也更容易被维护。
更⾼的可⽤性:该特点是在于服务提供者和服务使⽤者的松散耦合关系上得以发挥与体现。 使⽤者⽆须了解提供者的具休实现细节。
更⾼的可⽤性
更好的伸缩性:依靠业务服务设计、开发和部署等所采⽤的架构模型实现伸缩性。使得服务 提供者可以互相彼此独⽴地进⾏调整,以满⾜新更好的伸缩性
的服务需求。
2.3SOA 架构的缺点
减低了系统的性能
系统之间交互需要使⽤远程通信,接⼝开发增加⼯作量
3 什么是 RPC 调⽤
RPC(Remote Procedure Call)—远程过程调⽤,它是⼀种通过⽹络从远程计算机程序上请求 服务,⽽不需要了解底层⽹络技术的协议。请求程序就是⼀个客户机,⽽服务提供程序就是 ⼀个服务器
4 RPC 的应⽤场景
⽀付宝、、银联等第三⽅⽀付接⼊
公司内部的不同业务系统,不同技术平台的整合
5 RPC 的实现⽅式
RMI:Java 提供的基于 java 平台 RPC 远程调⽤技术,服务消费者和服务提供者是 java 平台
WEBSERVICE:通过 Http 协议,请求发送 xml 和响应 xml 的 RPC 远程调⽤技术,最⼤的特征使⽤ xml 进⾏数据交互,可以实现跨平台调⽤。
HttpClient:Http 客户端⼯具,Java 程序通过 HttpClient 发送 Http 协议的请求,直接获得远程 资源
HttpClient 实现 RPC 调⽤
1、HttpClient 介绍 HTTP 协议可能是现在 Internet 上使⽤得最多、最重要的协议了,越来越多的 Java 应⽤程 序需要直接通过 HTTP
协议来访问⽹络资源。 HttpClient 是 Apache Jakarta Common 下的⼦项⽬,供⾼效的、最新的、功能丰富的⽀持 HTTP 协议的客户端
编程⼯具包。实现了所有 HTTP 的⽅法(GET,POST,PUT,HEAD 等)⽀持 RestFul。
2、服务提供者实现
2.1 业务需求说明
实现:通过⽤户系统访问订单系统,获得某个⽤户的订单信息。
2.2 创建 order-sys 项⽬
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/P <modelVersion>4.0.0</modelVersion>
<groupId>com.bjsxt.provider</groupId>
<artifactId>order-sys</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<!-- spring 依赖 -->
<spring.version>4.3.18.RELEASE</spring.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<jackson.version>2.9.0</jackson.version>
</properties>
<dependencies>
<!-- jsp相关依赖 -->
<!-- servlet依赖 -->
<!-- jstl依赖 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>com.</groupId> <artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
<build>
<finalName>order</finalName>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>at.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version>
<configuration>
<path>/order</path>
<port>7070</port>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.3 创建 Order 订单实体类
package com.bjsxt.domain;
/***
* 订单的实体类
* @author Administrator
*
*/
public class Order {
private String id;
private Double total;
private String date;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
3.4 创建 OrderController
package ller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
import com.bjsxt.domain.Order;
@Controller
public class OrderController {
调用webservice服务/**
* 接收http请求,响应订单集合
* **/
@RequestMapping("/loadOrderList")
public String loadOrderList(String uid,Model model){
Order o1=new Order();
o1.setId("111");
o1.setTotal(123.0);
o1.setDate("2018-10-10");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论