07 springboot整合rabbitmq

本节将阐述在springboot中整合rabbitmq。

1、前提约束

2、操作步骤

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
  • 修改application.properties
server.port=8088
spring.application.name=boot-rabbitmq
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5762
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
  • 在主启动类同级目录下创建config包,在该包下创建配置类RabbitConfig.java
package net.wanho.rabbitmq.springbootrabbitmq.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitmqConfig {
    final String email = "queue_email";
    final String sms = "queue_sms";
    final String exchange_topics = "exchange_topics";

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

    @Bean(sms)
    public Queue sms() {
        Queue queue = new Queue(sms);
        return queue;
    }

    @Bean(email)
    public Queue email() {
        Queue queue = new Queue(email);
        return queue;
    }

    @Bean
    public Binding bindingSms(@Qualifier(sms) Queue queue, @Qualifier(exchange_topics) Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("inform.#.sms.#").noargs();
    }

    @Bean
    public Binding bindingEmail(@Qualifier(email) Queue queue, @Qualifier(exchange_topics) Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("inform.#.email.#").noargs();
    }
}
  • 在主启动类同级目录下创建controller包,在该包下创建配置类ProducerController.java
package net.wanho.rabbitmq.springbootrabbitmq.controller;

import net.wanho.rabbitmq.springbootrabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class ProducerController {
    @Resource
    RabbitTemplate rabbitTemplate;

    @GetMapping("/rabbitmq/producer/sms")
    public String sendSms() {
        String message = "sms to user";
        rabbitTemplate.convertAndSend(RabbitmqConfig.exchange_topics, "inform.sms.email", message);
        System.out.println("Send Message is:'" + message + "'");
        return "send success";
    }

    @GetMapping("/rabbitmq/producer/email")
    public String sendEmail() {
        String message = "email to user";
        rabbitTemplate.convertAndSend(RabbitmqConfig.exchange_topics, "inform.sms.email", message);
        System.out.println("Send Message is:'" + message + "'");
        return "send success";
    }
}
  • 在主启动类同级目录下创建listener包,在该包下创建配置类ReceiveListener.java
package net.wanho.rabbitmq.springbootrabbitmq.listener;

import com.rabbitmq.client.Channel;
import net.wanho.rabbitmq.springbootrabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class ReceiveListener {
    @RabbitListener(queues = {RabbitmqConfig.email})
    public void receive_email(String msg, Message message, Channel channel) {
        System.out.println(msg);
    }

    @RabbitListener(queues = {RabbitmqConfig.sms})
    public void receive_sms(String msg, Message message, Channel channel) {
        System.out.println(msg);
    }
}
posted @ 2020-03-17 21:28  张力的程序园  阅读(119)  评论(0)    收藏  举报