20191105 《Spring5高级编程》笔记-第12章
第12章 使用Spring远程处理
12.4 在Spring中使用JMS
使用面向消息的中间件(通常成为MQ服务器)是另一种支持应用程序间通信的流行方法。消息队列(MQ)服务器的主要优点在于为应用程序集成提供了异步和松耦合的方式。在Java中,JMS是连接到MQ服务器以发送或接收消息的标准。MQ服务器维护应用程序可以连接并发送和接受消息的队列即主题列表。
- 队列
队列用于支持点对点消息交换模型。当一名生产者向队列发送消息时,MQ服务器会将消息保留在队列中,并在消费者下次连接时将消息传递给一名消费者(且只能传递给一名消费者)。 - 主题
主题用于支持发布-订阅模型。任何数量的客户端都可以订阅主题中的消息。当某条消息到达主题时,MQ服务器会将其发送给订阅了该消息的所有客户端。
从Spring5开始,不再支持JMS1.1。
TODO:
示例使用的是 HornetQ,应该换成更流行的消息队列。
另外,需要深入学习一种消息队列,以及Spring与消息队列的结合使用,具体学习哪种,可以从Spring Boot的starter里寻找。
12.5 Spring Boot Artemis启动器
JmsTemplate bean不仅可以发送消息,还可以接收消息,但这是同步完成的,意味着JmsTemplate会被阻塞。这就是使用显式配置的JmsListenerContainerFactory bean来创建DefaultMessageListenerContainer的原因——能够以最高的连接效率异步的使用消息。
12.6 在Spring中使用RESTful-WS
12.6.1 RESTful Web服务介绍
RESTful-WS中的REST是REpresentational State Transfer的缩写,是一种架构样式。REST定义了一组架构约束,它们共同描述了一个访问资源的统一接口。这个统一接口通过不同的表达形式来识别和操作资源。为了识别资源,应该通过统一资源标识符(URI)访问一条信息。

12.7 配置Castor XML
Spring自带的Jackson有支持XML的方法,不知道为什么不使用Jackson?
12.7.1 实现SingerController
@ResponseBody注解指示方法的返回值应该直接写入HTTP响应流,而不是与视图匹配。
使用@RequestBody对入参进行注解,指示Spring自动将HTTP请求体内的内容绑定到入参对象。该转换通过org.springframework.http.converter.HttpMessageConverter接口来完成。
12.7.2 配置Spring Web应用程序
Spring Web应用程序遵循Front Controller设计模式,其中所有请求都由单个控制器接收,然后分派给相应的处理程序(控制器类)。中央调度程序是org.springframework.web.servlet.DispatcherServlet的一个实例,由org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer类进行注册,需要对该类进行扩展以替换web.xml配置。
12.7.4 使用RestTemplate访问RESTful-WS
可以使用RestTemplate类访问RESTful Web服务。
TODO 深入学习
org.springframework.web.client.RestTemplate
12.7.5 使用Spring Security来保护RESTful-WS
org.springframework.http.client.HttpComponentsClientHttpRequestFactory是Spring对Apache HttpComponents HttpClient库提供的支持。
TODO 深入学习
Spring Security
12.8 使用Spring Boot开发RESTful-WS

12.9 在Spring中使用AMQP
远程处理可以通过使用以高级消息队列协议(AMQP)作为传输协议的远程过程调用(RPC)通信来完成。AMQP是实现面向消息中间件(MOM)的开放标准协议。
JMS应用程序适用于任何操作系统环境,但仅支持Java平台。AMQP标准可用于开发可轻松同行的多种语言的应用程序。
与使用JMS相似,AMQP也是用消息代理来交换消息。Spring本身没有在核心框架中提供远程处理功能,而是提供了Spring AMQP项目来处理。
Spring AMQP项目由两部分组成:spring-amqp是基本抽象,spring-rabbit是RabbitMQ实现。
虽然配置相似,但JMS和AMQP是两种完全不同的传输协议。
20191105 《Spring5高级编程》笔记-第12章的更多相关文章
- C#高级编程笔记之第二章:核心C#
变量的初始化和作用域 C#的预定义数据类型 流控制 枚举 名称空间 预处理命令 C#编程的推荐规则和约定 变量的初始化和作用域 初始化 C#有两个方法可以一确保变量在使用前进行了初始化: 变量是字段, ...
- python高级编程(第12章:优化学习)1
# -*- coding: utf-8 -*-# python:2.x__author__ = 'Administrator'#由于5,6,7,8,9,10,11主要是在包,测试之类的学习所以这边就不 ...
- python高级编程(第12章:优化学习)3
#微观剖析 ''' 当找到速度很慢函数时,有时还需要做到测试某个部分函数剖析工作,这需要通过手动对一部分代码速度测试完成 ''' """ import tempfile, ...
- python高级编程(第12章:优化学习)2
#优化策略 #3个原则 """ 1a:寻找其他原因:确定第三方服务器或资源不是问题所在 2a:度量硬件:确定资源足够用 3a:编写速度测试:创建带有速度要求的场景 &qu ...
- C#高级编程笔记之第一章:.NET体系结构
1.1 C#与.NET的关系 C#不能孤立地使用,必须与.NET Framework一起使用一起考虑. (1)C#的体系结构和方法论反映了.NET基础方法论. (2)多数情况下,C#的特定语言功能取决 ...
- 20191105 《Spring5高级编程》笔记-【目录】
背景 开始时间:2019/09/18 21:30 Spring5高级编程 版次:2019-01-01(第5版) Spring5最新版本:5.1.9 CURRENT GA 官方文档 Spring Fra ...
- 读《C#高级编程》第1章问题
读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...
- Android高级编程笔记(四)深入探讨Activity(转)
在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...
- C#高级编程9 第18章 部署
C#高级编程9 第18章 部署 使用 XCopy 进行部署 本主题演示如何通过将应用程序文件从一台计算机复制到另一台计算机来部署应用程序. 1.将项目中生成的程序集复制到目标计算机,生成的程序集位于项 ...
- C#高级编程9 第17章 使用VS2013-C#特性
C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...
随机推荐
- 内置json&pickle&shelve&xml
序列化:把对象(变量)从内存中变成可存储可传输的过程称之为序列化,Python中叫做pickling,其他语言中也被称之为serialization,marshalling,flattening等等 ...
- 基于FastDFS在SpringBoot上的上传与下载
方法: 1.在application.properties里设置参数,其中tracker-list是tracker的端口 fdfs.so-timeout= fdfs.connect-timeout= ...
- 16 | “order by”是怎么工作的? 学习记录
<MySQL实战45讲>16 | “order by”是怎么工作的? 学习记录http://naotu.baidu.com/file/0be0e0acdf751def1c0ce66215e ...
- 什么原因?全球许多网络提供商推迟部署IPv6
全球许多网络提供商推迟部署IPv6,指出升级路由器和交换机的成本以及NAT为扩展IPv4地址所取得的令人印象深刻的成就. 这并没有阻止像澳门CTM这样的互联网服务供应商不要冒险,以此为榜样,并且满足终 ...
- Vue 基于node npm & vue-cli & element UI创建vue单页应用
基于node npm & vue-cli & element UI创建vue单页应用 开发环境 Win 10 node-v10.15.3-x64.msi 下载地址: https ...
- 前端node面试题之---对比JS和NodeJS的区别
区别: 1.JS运行在浏览器端,用于用户的交互效果,NodeJS运行在服务器端,用于服务器的操作,例如,Web服务器创建,数据库的操作,文件的操作等 2.JS运行在浏览器端,存在多个JS解释器,存在兼 ...
- React Native 之createDrawerNavigator和createSwitchNavigator
其他代码接上篇文章 createDrawerNavigator 抽屉 createSwitchNavigator 模拟登录=>主界面 index.js /** * @format */ impo ...
- pandas中的describe方法
- IO重定向与管道
一.三种IO设备 程序:数据+指令 或 数据结构+算法 程序必须能够读入输入然后经过加工来产生结果,其接受的输入可以是变量.数组.列表.文件等等,生产出来的结果可以使变量.数组.列表.文件等等.即: ...
- 解决:父类中的@NotNull无效以及@Notnull 验证list对象无效
解决方法如图: controller层 vo.param层 父类验证注解要使用@NotEmpty 不能使用 @NotNull,否则验证无效的,反正笔者是没有成功过