RabbitMQ概念-配置

二 RabbitMQ

AMQP

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

RabbitMQ支持

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

Properties

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=secret

或者,您可以使用addresses属性配置相同的连接

Properties

spring.rabbitmq.addresses=amqp://admin:secret@localhost

以这种方式指定地址时,将忽略主机和端口属性。如果地址使用amqps协议,则会自动启用SSL支持。

有关更多受支持的基于属性的配置选项,请参阅RabbitProperties。要配置Spring AMQP使用的RabbitMQ ConnectionFactory的较低级别详细信息,请定义ConnectionFactoryCustomizer bean。

如果上下文中存在ConnectionNamestrategybean,则将自动使用它命名由自动配置的CachingConnectionFactory创建的连接

发送消息

Spring的AmqpTemplate和AmqpAdmin是自动配置的,您可以将它们直接自动关联到您自己的bean中

@Component
public class MyBean {

    private final AmqpAdmin amqpAdmin;

    private final AmqpTemplate amqpTemplate;

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

    // ...

}

RabbitMessagingTemplate可以以类似的方式注入。如果定义了MessageConverter bean,它将自动关联到自动配置的AmqpTemplate

Properties

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

如有必要,任何组织。springframework。amqp。果心定义为bean的队列自动用于在RabbitMQ实例上声明相应的队列。

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

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

如果需要创建更多的rabbitmplate实例,或者希望覆盖默认值,Spring Boot提供了一个rabbitmplateconfigurer bean,您可以使用与自动配置使用的工厂相同的设置来初始化rabbitmplate。

向流发送消息

要向特定流发送消息,请指定流的名称

Properties

spring.rabbitmq.stream.name=my-stream

如果定义了MessageConverter、StreamMessageConverter或ProducerCustomizer bean,则它会自动关联到自动配置的RabbitStreamTemplate。

如果需要创建更多RabbitStreamTemplate实例,或者希望覆盖默认值,Spring Boot提供了一个RabbitStreamTemplateConfigurer bean,您可以使用与自动配置使用的工厂相同的设置来初始化RabbitStreamTemplate。

接收消息

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

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

@Component
public class MyBean {

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

}

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

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

@Configuration(proxyBeanMethods = false)
public class MyRabbitConfiguration {

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

    private ConnectionFactory getCustomConnectionFactory() {
        return ...
    }

}

然后,您可以在任何带@RabbitListener注释的方法中使用工厂

@Component
public class MyBean {

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

}

您可以启用重试来处理侦听器引发异常的情况。默认情况下,使用RejectAndDontRequeueRecoverer,但您可以定义自己的MessageRecoverer。重试次数用尽时,消息将被拒绝,并被丢弃或路由到死信交换(如果代理配置为这样做)。默认情况下,将禁用重试。还可以通过声明RabbitRetryTemplateCustomizer bean以编程方式自定义RetryTemplate

重点

默认情况下,如果禁用重试,并且侦听器引发异常,则将无限期重试传递。您可以通过两种方式修改此行为:将defaultRequeueRejected属性设置为false,以便尝试零次重新传递,或引发AmqpRejectAndDontRequeueException以指示应拒绝消息。后者是启用重试并达到最大传递尝试次数时使用的机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,它实现了AMQP(高级消息队列协议)并提供了可靠的消息传递机制。下面是RabbitMQ配置介绍: 1. 安装和启动:首先需要在服务器上安装RabbitMQ,并启动RabbitMQ服务。 2. 配置文件:RabbitMQ配置文件位于/etc/rabbitmq目录下,主要包括rabbitmq.config和rabbitmq-env.conf两个文件。其中,rabbitmq.config用于配置RabbitMQ的各种参数,如监听端口、虚拟主机等;rabbitmq-env.conf用于设置环境变量。 3. 虚拟主机:RabbitMQ支持虚拟主机的概念,可以将消息队列划分为多个逻辑上独立的部分。在配置文件中可以通过添加如下配置来创建虚拟主机: ``` {rabbit, [ {virtual_hosts, [ {"/", []}, {"/vhost1", []}, {"/vhost2", []} ]} ]}. ``` 4. 用户和权限:RabbitMQ可以通过用户名和密码进行身份验证,并通过权限控制来限制用户对消息队列的访问。可以通过以下命令创建用户并设置权限: ``` rabbitmqctl add_user username password rabbitmqctl set_permissions -p vhost username ".*" ".*" ".*" ``` 5. 集群配置RabbitMQ支持集群模式,可以将多个节点组成一个集群,提高可用性和性能。在配置文件中可以通过添加如下配置配置集群: ``` {rabbit, [ {cluster_nodes, {['rabbit@node1', 'rabbit@node2'], disc}} ]}. ``` 6. 插件管理:RabbitMQ提供了丰富的插件来扩展其功能,可以通过rabbitmq-plugins命令来管理插件。例如,启用管理插件可以通过以下命令实现: ``` rabbitmq-plugins enable rabbitmq_management ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值