Spring整合RabbitMQ-配制文件方式-2-推模式消费者

推模式的消费者

在推模式中使用可以两种实现:

  1. 使用ChannelAwareMessageListener.

除消息外,还提供了Channel这个对象,通过channel可以有更大的灵活性。

java 复制代码
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;

public class MesListener implements ChannelAwareMessageListener {

    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        
    }
}
  1. 使用MessageListener

基本的消息的临时。普通的场景基本够用。

java 复制代码
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;

public class MesListener implements MessageListener {
    @Override
    public void onMessage(Message message) {

    }
}

此处以ChannelAwareMessageListener为样例:

java 复制代码
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;

public class MesListener implements ChannelAwareMessageListener {

    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        String encoding = message.getMessageProperties().getContentEncoding();
        System.out.println("收到的消息是:" + new String(message.getBody(), encoding));
    }
}

spring-rabbit.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <!--配制连接工厂-->
    <rabbit:connection-factory id="connectFactory"
                               host="node1" virtual-host="/"
                               username="root" password="123456"
                               port="5672"
    ></rabbit:connection-factory>


    <!--用于自动向RabbitMQ声明队列、交换器、绑定 等操作工具类-->
    <rabbit:admin id="rabbitAdmin" connection-factory="connectFactory"></rabbit:admin>


    <!--用于简化操作的模板类-->
    <rabbit:template connection-factory="connectFactory" id="rabbitTemplate"/>


    <!--声明队列队列-->
    <rabbit:queue id="msg1" name="queue.msg" durable="false" exclusive="false" auto-delete="false"></rabbit:queue>


    <!--配制鉴别器对象-->
    <bean id="msgListener" class="com.nullnull.learn.MesListener"/>

    <!--配制监听器-->
    <rabbit:listener-container connection-factory="connectFactory">
        <rabbit:listener ref="msgListener" queues="msg1"></rabbit:listener>
    </rabbit:listener-container>


</beans>

容器启动类

java 复制代码
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ListenerApplication {
    public static void main(String[] args) {
        //启动Spring容器
        new ClassPathXmlApplicationContext("spring-rabbit.xml");
    }
}

首先启动消费者。这样监听者就会处于监听状态。

再启动生产者,向队列中发送消息。

再观察消息者,便能看到消费者队列中已经收到了发送的消息。

java 复制代码
收到的消息是:hello world

在推模式中消息的即时性比拉模式会好。

相关推荐
AntBlack4 小时前
虽迟但到 :盘一盘 SpringAI 现在发展得怎么样了?
后端·spring·openai
ss2735 小时前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
兩尛6 小时前
Spring面试
java·spring·面试
我命由我123459 小时前
Spring Boot - Spring Boot 静态资源延迟响应(使用拦截器、使用过滤器、使用 ResourceResolver)
java·spring boot·后端·spring·java-ee·intellij-idea·intellij idea
迦蓝叶14 小时前
JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
java·运维·人工智能·网关·spring·ai·开源
一叶飘零_sweeeet15 小时前
深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
java·spring·设计模式
洛克大航海15 小时前
3-SpringCloud-LoadBalancer-OpenFeign服务调用与负载均衡
spring·spring cloud·负载均衡·openfeign·loadbalancer
FreeBuf_16 小时前
Spring两大漏洞可导致泄露敏感信息及安全防护绕过(CVE-2025-41253/41254)
java·安全·spring
RainbowSea16 小时前
11. Spring AI + ELT
java·spring·ai编程
RainbowSea16 小时前
12. 模型RAG评测
java·spring·ai编程