Springboot结合RabbitMQ

pom.xml

xml 复制代码
 <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

application.yaml

yaml 复制代码
spring:
  rabbitmq:
    host: 127.0.0.1
    username: guest
    password: guest
    port: 5672
    virtual-host: test_vhost
    connection-timeout: 600000
    # 关闭自动ack,设置成手动ack
    listener:
      simple:
        acknowledge-mode: manual
        prefetch: 10
        concurrency: 2
        max-concurrency: 5

配置文件,也可以使用@PostConstruct

java 复制代码
@Configuration
public class RabbitMQConfig {
	/**
	* 绑定
	*/
    public static final String EXCHANGE_NAME="springboot_topic_exchange";
    public static final String QUEUE_NAME="springboot_queue";

    @Bean("exchange")
    public Exchange exchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }

    @Bean("queue")
    public Queue queue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }

    @Bean()
    public Binding bindQueueExchange(@Qualifier("exchange")Exchange exchange,
                                     @Qualifier("queue")Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
    }
	
   /*
	* Fanout 模式
	*/
	public static final String EXCHANGE_NAME2="my_topic_exchange";
    public static final String QUEUE_NAME2="my_queue";
    //创建交换机
    @Bean
    public FanoutExchange fannoutExchange(){
        return new FanoutExchange(EXCHANGE_NAME2,true,false);
    }

    //创建队列
    @Bean
    public Queue fannoutQueue(){
        return new Queue(QUEUE_NAME2,true,false,false);
    }
    //声明绑定关系
    @Bean
    public Binding bindQueue(@Qualifier("exchange")Exchange exchange,
                                     @Qualifier("queue")Queue queue){
        return BindingBuilder.bind(fannoutQueue()).to(fannoutExchange());
    }
    
   /*
	* topic 模式
	*/
	@Bean
    public Queue topicQueue(){
        return new Queue(QUEUE_NAME,true,false,false);
    }
    //创建交换机
    @Bean
    public TopicExchange topicExchange(){
        return new TopicExchange(EXCHANGE_NAME,true,false);
    }
    //声明绑定关系
    @Bean
    public Binding bindTopicQueue(){
        return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("yuyang.#");
    }

消费者代码

java 复制代码
@Component
@Slf4j
public class MessageListener  {
	@RabbitListener(queues="springboot_queue")
    public void process(Message message) {
        log.info("helloWorld模式 received message : {}",new String(message.getBody()));
    }


}

生产者代码

java 复制代码
	@Autowired
    private RabbitTemplate rabbitTemplate;

    // pub/sub 发布订阅模式   交换机类型 fanout
    @GetMapping("/fanoutSend")
    public String fanoutSend() throws AmqpException, UnsupportedEncodingException {
        //fanout模式只往exchange里发送消息。分发到exchange下的所有queue
        rabbitMQService.sendMessage("my_topic_exchange","*","fanoutSend");
        return "message sended : "+message;
    }

	//topic 工作模式   交换机类型 topic
    @GetMapping("/topicSend")
    public String topicSend() throws AmqpException, UnsupportedEncodingException {
        //fanout模式只往exchange里发送消息。分发到exchange下的所有queue
        rabbitTemplate.convertAndSend("spring_topic_exchange","yuyang.test","sadedf");
        return "ok";
    }

手动ack

java 复制代码
	@RabbitListener(queues = "springboot_queue")
    public void listenerQueue(Message message, Channel channel) throws IOException {
         log.info(new String(message.getBody()));
        channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
    }
相关推荐
用户908324602731 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
用户8307196840822 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解2 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解2 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记2 天前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者3 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840823 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解3 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
用户8307196840824 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者4 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq