资讯专栏INFORMATION COLUMN

快速入门spring-amqp

邹强 / 1929人阅读

摘要:它还为具有侦听器容器的消息驱动的提供支持。接收消息当存在基础结构时,可以使用任何来注释以创建侦听器端点。默认情况下,如果禁用重试并且侦听器抛出异常,则会无限期地重试传递。

Spring-amqp-tutorial

Spring AMQP项目将核心Spring概念应用于基于AMQP的消息传递解决方案的开发。它提供了一个“模板”作为发送和接收消息的高级抽象。它还为具有“侦听器容器”的消息驱动的POJO提供支持。这些库有助于管理AMQP资源,同时促进依赖注入和声明性配置的使用。在所有这些情况下,您将看到Spring Framework中与JMS支持的相似之处。

该项目由两部分组成; spring-amqp是基础抽象,spring-rabbit是RabbitMQ实现。

特征

用于异步处理入站消息的侦听器容器

RabbitTemplate用于发送和接收消息

RabbitAdmin用于自动声明队列,交换和绑定

SpringBoot配置 AMQP

高级消息队列协议(AMQP)是面向消息的中间件的平台中立的线级协议。Spring AMQP项目将核心Spring概念应用于基于AMQP的消息传递解决方案的开发。Spring Boot为通过RabbitMQ使用AMQP提供了一些便利,包括spring-boot-starter-amqp “Starter”。

RabbitMQ支持

RabbitMQ是一个基于AMQP协议的轻量级,可靠,可扩展且可移植的消息代理。Spring用于RabbitMQ通过AMQP协议进行通信。

RabbitMQ配置由外部配置属性控制 spring.rabbitmq.*。例如,您可以在以下部分声明以下部分 application.properties:

spring.rabbitmq.host = localhost
spring.rabbitmq.port = 5672
spring.rabbitmq.username = guest
spring.rabbitmq.password = guest

如果ConnectionNameStrategy上下文中存在bean,则它将自动用于命名由自动配置创建的连接ConnectionFactory。有关RabbitProperties更多支持的选项,请参阅 。

发送消息

Spring的AmqpTemplate和AmqpAdmin被自动配置,您可以直接自动装配它们变成自己的豆类,如下面的例子:

@Component
public class MyBean {

    private final AmqpAdmin amqpAdmin;
    private final AmqpTemplate amqpTemplate;

    @Autowired
    public MyBean(AmqpAdmin amqpAdmin,AmqpTemplate amqpTemplate){
        this.amqpAdmin = amqpAdmin;
        this.amqpTemplate = amqpTemplate;
    }

    //....
}

如有必要,任何org.springframework.amqp.core.Queue定义为bean的都会自动用于在RabbitMQ实例上声明相应的队列。

要重试操作,可以启用重试AmqpTemplate(例如,在代理连接丢失的情况下):

spring.rabbitmq.template.retry.enabled = true
spring.rabbitmq.template.retry.initial-interval = 2s

默认情况下禁用重试。您还可以RetryTemplate 通过声明RabbitRetryTemplateCustomizerbean来以编程方式自定义。

接收消息

当存在Rabbit基础结构时,可以使用任何bean来注释 @RabbitListener以创建侦听器端点。如果RabbitListenerContainerFactory 未定义,SimpleRabbitListenerContainerFactory则会自动配置默认值,您可以使用该spring.rabbitmq.listener.type属性切换到直接容器 。如果 定义了a MessageConverter或MessageRecovererbean,它将自动与默认工厂关联。

以下示例组件在someQueue队列上创建侦听器端点:

@Component
public class MyBean {

    @RabbitListener(queues = "someQueue")
    public void processMessage(String content){
        //....
    }

}

如果您需要创建更多RabbitListenerContainerFactory实例,或者如果要覆盖默认实例,则Spring Boot提供了一个 SimpleRabbitListenerContainerFactoryConfigurer和一个 DirectRabbitListenerContainerFactoryConfigurer可用于初始化一个 SimpleRabbitListenerContainerFactory和一个 DirectRabbitListenerContainerFactory的设置,其设置与自动配置使用的工厂相同。

例如,以下配置类公开了另一个使用特定的工厂MessageConverter:

@Configuration
public class RabbitConfiguration {

    ConnectionFactory connectionFactory;

    @Bean
    public SimpleRabbitListenerContainerFactory myFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer){
        SimpleRabbitListenerContainerFactory factory =
                new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory,connectionFactory);
        factory.setMessageConverter(myMessageConverter());
        return factory;
    }

    private MessageConverter myMessageConverter() {
        //..
        return null;
    }

}

然后您可以在任何@RabbitListener注释方法中使用工厂,如下所示:

@Component
public class MyBean {

    @RabbitListener(queues = "someQueue",concurrency = "myFactory")
    public void processMessage(String content){
        //..
    }

}

您可以启用重试来处理侦听器抛出异常的情况。默认情况下,RejectAndDontRequeueRecoverer使用,但您可以定义MessageRecoverer 自己的。当重试耗尽时,如果代理配置了这样做,则拒绝该消息并将其丢弃或路由到死信交换。默认情况下,禁用重试。您还可以RetryTemplate通过声明RabbitRetryTemplateCustomizerbean来以编程方式自定义。

默认情况下,如果禁用重试并且侦听器抛出异常,则会无限期地重试传递。您可以通过两种方式修改此行为:将defaultRequeueRejected属性设置 为false以便尝试零重新传递,或抛出一个AmqpRejectAndDontRequeueException信号来拒绝该消息。后者是启用重试并且达到最大传递尝试次数时使用的机制。
快速开始

参考地址:

spring-amqp

spring-amqp-samples

下文教程Github地址

配置环境

    org.springframework.boot
    spring-boot-starter-amqp

链接参数

spring:
  rabbitmq:
    host: 192.168.192.132
    port: 5672
    username: guest
    password: guest
    template:
      retry:
        enabled: true # 代理链接丢失、启用重试AmqpTemplate
        initial-interval: 2s # 代理链接丢失、启用重试AmqpTemplate
amqpAdmin

amqpAdmin可以用于交换器,队列以及绑定的申明,以下代码演示了amqpAdmin的主要用法。

public class MyAdmin extends SampleApplicationTests {

    @Autowired
    AmqpAdmin amqpAdmin;

    @Test
    public void contextLoads(){
        //新建交换器
        amqpAdmin.declareExchange(new DirectExchange("myself.directExchange"));
        //新建队列
        amqpAdmin.declareQueue(new Queue("myself.queue",true));
        //绑定
        amqpAdmin.declareBinding(new Binding("myself.queue",Binding.DestinationType.QUEUE,"myself.directExchange","",null));
    }

    @Test
    public void remove(){
        //移除交换器
        amqpAdmin.deleteExchange("myself.directExchange");
        //移除队列
        amqpAdmin.deleteQueue("myself.queue");
    }
}

amqpTemplate

快速使用的发送接收模板

public class MyTemplate extends SampleApplicationTests {

    @Autowired
    AmqpTemplate amqpTemplate;

    @Test
    public void send(){
        amqpTemplate.convertAndSend("myself.queue","nihao");
    }

}

接收监听
@Service
public class MyService {

    @RabbitListener(queues = "myself.queue")
    public void recevie(String result){
        System.out.println("监听到消息了");
        System.out.println(result);
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72273.html

相关文章

  • SpringBoot+RabbitMq实现延时消息队列

    背景: 在一些应用场景中,程序并不需要同步执行,例如用户注册之后的邮件或者短信通知提醒。这种场景的实现则是在当前线程,开启一个新线 程,当前线程在开启新线程之后会继续往下执行,无需等待新线程执行完成。 但例如一些需要延时的场景则不只是开启新线程执行如此简单了。譬如提交订单后在15分钟内没有完成支付,订单需要关闭,这种情 况,是否只开启一个异步线程就不适用了呢。 那么就单单实现...

    alighters 评论0 收藏0
  • vue.js快速入门

    摘要:但是,今天我要写一个快速入门,本人觉得还是有一点用处,因为,我不可能在一天之内精通某种东西,却可以在一两小时入门。不知道还要不要再来一个快速入门,发展得挺快,东西也像类似的全家。 以前看到多少天学习系列,我都深感烦躁,短短几天怎么可以精通,那是对于他们而言。但是,今天我要写一个快速入门,本人觉得还是有一点用处,因为,我不可能在一天之内精通某种东西,却可以在一两小时入门。 回到vue本身...

    MkkHou 评论0 收藏0
  • 云服务器ecs个人版快速入门概述

    摘要:云服务器实例,有时候也被称为阿里云服务器云服务器云服务器等。为避免引起误解,本文一律使用云服务器实例这一名称,简称实例。快速入门流程 一般购买和使用云服务器 ECS实例遵循以下步骤:配置选型创建实例远程连接实例如果是 Linux 实例,格式化和挂载数据盘 ;如果是 Windows 实例,格式化数据盘 文档目的 本文档介绍了如何快速创建实例、远程连接实例、格式化数据盘等。旨在引导您一站式完成实...

    asce1885 评论0 收藏0
  • 一张脑图看懂BUI Webapp移动快速开发框架【下】--快速入门指引

    摘要:例如改成例如改成以上两种开发方式都可以结合原生平台打包成独立应用。 继上一篇一张脑图看懂BUI Webapp移动快速开发框架【上】--框架与工具、资源 大纲 在线查看大纲 思路更佳清晰 1. 框架设计 框架介绍 简介 BUI 是用来快速构建界面交互的UI交互框架, 专注webapp开发, 开发者只需关注业务的开发, 界面的布局及交互交给BUI, 开发出来的应用, 可以嵌入平台 ( Li...

    hzx 评论0 收藏0
  • 云服务器ecs企业版快速入门概述

    摘要:快速入门流程企业级用户在购买和使用云服务器实例时,通常需考虑如下几点配置选型估算成本网络规划配置安全组制定自动快照策略镜像迁移用负载均衡实现的高可用性读者对象本文档作为快速入门参考,适用于有以下需求的读者了解如何进行云服务器实例的配置选型。快速入门流程企业级用户在购买和使用云服务器ECS实例时,通常需考虑如下几点: 配置选型估算成本网络规划配置安全组制定自动快照策略镜像迁移用负载均衡实现EC...

    Clect 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<