Spring 框架入门教程
1. 1. Spring 框架 2. 2. Spring 5 3. 3. Spring WebFlux 4. 4. 先介绍一下 Spring 5. 5. 什么是 Spring 依赖注入 6. 6. 什么是 Spring IoC 容器 和 Bean 7. 7. Spring Bean 的生命周期 8. 8. Spring REST 开发 9. 9. Spring REST XML 10. 10. Spring RestTemplate 开发 11. 11. Spring AOP 切面编程 12. 12. Spring AOP 方法调优 13. 13. Spring 注解详解 14. 14. Spring 核心注解之 @Autowired 15. 15. Spring 核心注解之 @RequestMapping 16. 16. Spring MVC 开发样例 17. 17. Spring MVC 开发指南 18. 18. Spring MVC 异常处理机制 19. 19. Spring MVC Validator 20. 20. Spring MVC 拦截器 21. 21. Spring MVC 文件上传 22. 22. Spring MVC 国际化(i18n) 23. 23. Spring MVC Hibernate MqSQL 24. 24. Spring ORM 25. 25. Spring ORM JPA 26. 26. Spring Data JPA 27. 27. Spring 事务管理 28. 28. 常用的 Spring JdbcTemplate 29. 29. Spring Security 简介 30. 30. Spring Security 教程 31. 31. Spring Security UserDetailsService 32. 32. Spring MVC 登录注销简单案例 33. 33. Spring Security Roles 34. 34. Spring Boot Tutorial 35. 35. Spring Boot Components 36. 36. Spring Boot CLI Hello World 37. 37. Spring Boot Initilizr Web 38. 38. Spring Boot Initilizr IDE 39. 39. Spring Boot Initilizr CLI 40. 40. Spring Boot Initilizr Tools 41. 41. Spring Boot MongoDB 42. 42. Spring Boot Redis Cache 43. 43. Spring Boot 常见面试问题 44. 44. Spring Batch 45. 45. Spring Batch 批处理示例 46. 46. Spring AMQP 47. 47. Spring RabbitMQ 48. 48. Spring AMQP RabbitMQ 49. 49. Apache ActiveMQ 安装与启动 50. 50. Spring ActiveMQ 教程 51. 51. Spring ActiveMQ 示例 52. 52. Spring JDBC 53. 53. Spring DataSource JNDI 54. 54. Spring Hibernate 55. 55. Spring Primefaces JPA 56. 56. Spring Primefaces MongoDB 57. 57. Spring Primefaces Hibernate 58. 58. SpringRoo Primefaces Hibernate 59. 59. Spring JSF 60. 60. Spring JDF Hibernate 61. 61. Spring Data MongoDB 62. 62. Spring 常见面试问题

46. Spring AMQP

今天我们将关注SpringAMQP。

SpringAMQP

是基于AMQP的消息传递解决方案的Spring实现。为我们提供了一个用于发送和接收消息的高级抽象模板。在这个SpringAMQP中,我们将研究以下主题。辅导的。

  1. 什么是AMQP?
  2. 为什么我们需要AMQP?
  3. JMS和AMQP的区别
  4. Spring AMQP是如何工作的?
  5. SpringAMQP模块

什么是AMQP?

我们已经讨论过一些JMS系统我以前的文章中的概念和例子。在这篇文章中,我们将讨论AMQP协议和消息传递。

AMQP代表高级消息队列协议。AMQP是一种用于实现MOMs(面向消息的中间件)的开放标准协议。

为什么我们需要AMQP?

我们有jmsapi来开发企业消息传递系统,但是为什么我们需要另一个消息传递标准。

jmsapi的主要缺点或限制是互操作性,这意味着我们可以开发只在基于Java的应用程序中工作的消息传递系统。它不支持其他语言。

AMQP解决了jmsapi问题。AMQP的主要优点是它支持异构平台和消息传递代理之间的互操作性。我们可以开发我们的任何消息(java,C++,C语言,Ruby etc.)和任何操作系统的消息系统,但是它们仍然可以使用基于AMQP的消息代理来进行通信。

JMS和AMQP的区别

在本节中,我们将讨论JMS和AMQP协议之间的区别。

  1. 互操作性
  2. JMS应用程序可以在任何操作系统环境下工作,但它只支持Java平台。如果我们想用jmsapi开发下面的系统架构,那么所有这些系统都应该只使用Java语言开发。

    但是如果我们使用AMQP标准来开发同一系统,那么我们可以用任何系统语言来开发这些系统,这些系统是指系统1(java)、Stult-2(C×)、Stule-3(Ruby)和Stuler-4(C++)。

    jmsapi只针对Java平台,但AMQP支持许多技术。

  3. 消息传递模型
  4. 正如我们已经讨论过的,jmsapi支持两种消息传递模型:P2P(Peer-to-Peer)模型和PUB/SUB(Publisher/Subscriber)模型。

    AMQP支持五种不同的消息传递模型(或交换类型)

    1. 直接交换
    2. 扇形分叉交换
    3. 话题交流
    4. 邮件头交换
    5. 系统交换
  5. 消息结构
  6. JMS消息分为3个部分:头、属性和正文。AMQP消息分为4个部分:页眉、属性、正文和页脚。

  7. 消息类型
  8. jmsapi支持5种类型的消息作为Body部分的一部分,但是AMQP只支持一种类型的消息–;二进制(字节)消息。

Spring AMQP是如何工作的?

Spring框架提供api来集成AMQP消息代理和Spring应用程序,以开发企业消息传递系统。

在AMQP消息传递系统中,消息发布者向Exchange发送消息。发布者不知道哪个队列配置给这个交换,哪个使用者与这个队列关联。

在配置Exchange时,我们将通过指定一些路由键将其映射到一个或多个队列。

AMQP使用者连接到队列,并使用某个路由密钥侦听消息。

当发布服务器向Exchange发送消息时,Exchange将使用此路由密钥并将这些消息发送到关联的队列。当队列接收到消息时,关联的使用者将自动接收这些消息。

我们用上面的AMQP架构实现了我们的AMQP消息传递系统。

如果Publisher发送路由键为1的消息,则该消息将被路由到Queue1,然后路由到Consumer1。

如果发布服务器发送路由键为2的消息,则此消息将路由到队列2,然后路由到消费者2。

注:最流行的AMQP协议实现的消息代理或JMS服务器有:

  1. 阿帕奇活动MQ服务器
  2. Spring Rabbit MQ服务器

SpringAMQP模块

Spring框架提供了两组api来处理AMQP协议服务器。Spring AMQP项目位于以下网站:

https://spring.io/projects/spring-amqp

  1. SpringRabbitMQ AMQP API
  2. springrabbitmqamqpapi用于使用springrabbitmq服务器实现消息传递应用程序。此API在两个Spring模块中开发:

    • Springamqp:
    • 它是AMQP协议实现的基础抽象。

    • 春兔:
    • 它是RabbitMQ实现。

  3. SpringActiveMQ AMQP API
  4. 此API用于使用阿帕奇ActiveMQ服务器实现消息传递应用程序。此API使用Spring AMQP抽象模块和ActiveMQ API:

    • Springamqp:
    • 它是AMQP协议实现的基础抽象。

    • activemqSpring:
    • 它是ActiveMQ实现。

注:

  • 和springrabbitmq模块都来自Pivotal团队(springframework)。RabbitMQ服务器也来自Pivotal团队。
  • ActiveMQ服务器来自阿帕奇软件基金会。发布了一个API来支持Spring框架activemq-spring (It’s not from Pivotal Team).

这就是消息传递的全部内容。

进一步阅读:春兔MQ,阿帕奇 ActiveMQ