** RabbitMQ 快速入门*

一. 源码解析

1.1 直接上代码: pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>demo</groupId>
    <artifactId>com.demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.30</version>
    </dependency>
</dependencies>
    
</project>

1.2 启动类: RabbitApplication.java

package demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

/**
 * @program: Application
 * @author: anyu
 * @create: 2019/4/1-23:07
 **/
@SpringBootApplication
public class RabbitApplication {
    public static void main(String[] args) {
        SpringApplication.run(RabbitApplication.class, args);
    }
}

1.3 配置类:

package demo.config;
import org.springframework.amqp.core.*;
import org.springframework.amqp.core.ExchangeBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @program: RabbitConfig
 * @author: anyu
 * @create: 2019/5/27-11:46
 **/
@Configuration
public class RabbitConfig {

    public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";
    public static final String QUEUE_GATHER_ADD="queue_gather_add";
    
    /**
     * 交换机配置
     * ExchangeBuilder提欧共了fanout、direct、topic、header交换机类型的配置
     */
    @Bean(EXCHANGE_TOPICS_INFORM)
    public Exchange EXCHANGE_TOPICS_INFORM(){
        //durable(true)  持久化,消息队列重启后交换机仍然存在
        return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
    }

    @Bean(QUEUE_GATHER_ADD)
    public Queue QUEUE_GATHER_ADD(){
        return new Queue(QUEUE_GATHER_ADD);
    }

    @Bean
    public Binding BINDING_QUEUE_GATHER_ADD(@Qualifier (QUEUE_GATHER_ADD) Queue queue,@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with("gather_add").noargs();
    }
}

1.4 实体类(作为传递数据): Student.java

package demo.model;

import java.io.Serializable;

/**
 * @create_by: anyu
 * @craete_time 2019/6/20
 */
public class Student implements Serializable {

    private String username;
    private String password;

    public Student(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public Student() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

1.5 监听队列 消费者: ReceiveHandler.java

package demo.Listener;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import demo.config.RabbitConfig;
import demo.model.Student;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @program: ReceiveHandler
 * @author: anyu
 * @create: 2019/5/27-12:42
 **/
@Component
public class ReceiveHandler {
    //监听GATHER队列
    @RabbitListener(queues = {RabbitConfig.QUEUE_GATHER_ADD})
    public void receive_gather_add(String msg,Message message){
        System.out.println("我接收到消息啦");
        Student student = JSON.parseObject(msg, Student.class);
        System.out.println(student);
        System.out.println("end");
    }
}

1.6 测试类-> 发送数据 生产者 : Producer05_topics_springboot .ajva

import com.alibaba.fastjson.JSONObject;
import demo.RabbitApplication;
import demo.config.RabbitConfig;
import demo.model.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @program: Producer05_topics_springboot
 * @author: anyu
 * @create: 2019/5/27-12:38
 **/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitApplication.class)
public class Producer05_topics_springboot {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送消息   email
     * 因为我们使用的是通配模式
     * routKey为:inform.#.email.#   所以#的可以为任意,而匹配inform,和email的一一对应,
     * 而两个队列分别的routingKey为: inform.#.sms.#   和 inform.#.email.#  都可以匹配到
     * 所以这个消息被两个队列都接收到~
     */
    @Test
    public void sendMessage4(){
        Student student = new Student("张四", "123");
        String s = JSONObject.toJSONString(student);
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_TOPICS_INFORM,"gather_add",s);
    }


}

二. 上源码

发布了127 篇原创文章 · 获赞 52 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_37128049/article/details/93023212