第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中的RESTREpresentational 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章的更多相关文章

  1. C#高级编程笔记之第二章:核心C#

    变量的初始化和作用域 C#的预定义数据类型 流控制 枚举 名称空间 预处理命令 C#编程的推荐规则和约定 变量的初始化和作用域 初始化 C#有两个方法可以一确保变量在使用前进行了初始化: 变量是字段, ...

  2. python高级编程(第12章:优化学习)1

    # -*- coding: utf-8 -*-# python:2.x__author__ = 'Administrator'#由于5,6,7,8,9,10,11主要是在包,测试之类的学习所以这边就不 ...

  3. python高级编程(第12章:优化学习)3

    #微观剖析 ''' 当找到速度很慢函数时,有时还需要做到测试某个部分函数剖析工作,这需要通过手动对一部分代码速度测试完成 ''' """ import tempfile, ...

  4. python高级编程(第12章:优化学习)2

    #优化策略 #3个原则 """ 1a:寻找其他原因:确定第三方服务器或资源不是问题所在 2a:度量硬件:确定资源足够用 3a:编写速度测试:创建带有速度要求的场景 &qu ...

  5. C#高级编程笔记之第一章:.NET体系结构

    1.1 C#与.NET的关系 C#不能孤立地使用,必须与.NET Framework一起使用一起考虑. (1)C#的体系结构和方法论反映了.NET基础方法论. (2)多数情况下,C#的特定语言功能取决 ...

  6. 20191105 《Spring5高级编程》笔记-【目录】

    背景 开始时间:2019/09/18 21:30 Spring5高级编程 版次:2019-01-01(第5版) Spring5最新版本:5.1.9 CURRENT GA 官方文档 Spring Fra ...

  7. 读《C#高级编程》第1章问题

    读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...

  8. Android高级编程笔记(四)深入探讨Activity(转)

    在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...

  9. C#高级编程9 第18章 部署

    C#高级编程9 第18章 部署 使用 XCopy 进行部署 本主题演示如何通过将应用程序文件从一台计算机复制到另一台计算机来部署应用程序. 1.将项目中生成的程序集复制到目标计算机,生成的程序集位于项 ...

  10. C#高级编程9 第17章 使用VS2013-C#特性

    C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...

随机推荐

  1. C# Base64加解密

    using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptograph ...

  2. IsDate(expression)函数

    IsDate 函数 返回 Boolean 值指明某表达式是否可以转换为日期. IsDate(expression) expression 参数可以是任意可被识别为日期和时间的日期表达式或字符串表达式. ...

  3. 1121. Damn Single (25)

    "Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are suppo ...

  4. mepg

    MPEG(Moving Picture Experts Group,动态图像专家组)

  5. Netty学习第三章 Linux网络编程使用的I/O模型

    一.同步阻塞IO:blocking IO(BIO) 1.过程分析: 当进程进行系统调用时,内核就会去准备数据,当数据准备好后就复制数据到内核缓冲器,复制完成后将数据拷贝到用户进程内存,整个过程都是阻塞 ...

  6. 文件打包压缩——tar

    tar——压缩数据/解压数据内容 命令语法: tar zcvf  生成压缩包路径/压缩包.tar.gz    压缩数据01,02,03.... 巧记: 压缩名称为tar.gz,可以理解为tar命令,g ...

  7. linux运维、架构之路-Lamp架构部署

    一.Lamp架构原理 二.Lamp架构软件安装 1.apache安装脚本 #!/bin/sh cd /server/tools/ yum install zlib-devel -y wget http ...

  8. margin属性以及垂直外边距重叠问题

       盒子的margin属性         盒子的外边距margin 指的是当前盒子与其他盒子之间的距离,环绕在盒子周围的空白区域,属于不可见的区域,,不会影响到可见框的大小,而是会影响到盒子的位置 ...

  9. mysql INSERT语句 语法

    mysql INSERT语句 语法 作用:用于向表格中插入新的行. 语法:INSERT INTO 表名称 VALUES (值1, 值2,....)或者INSERT INTO table_name (列 ...

  10. 小程序cover-view

    cover-view包裹的元素设置定位,元素内容长短会影响cover-view的位置,即使设置的left,top一致 最佳解决方法,就是给cover-view设置宽度