一. 源码解析
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;
@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;
@Configuration
public class RabbitConfig {
public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";
public static final String QUEUE_GATHER_ADD="queue_gather_add";
@Bean(EXCHANGE_TOPICS_INFORM)
public Exchange EXCHANGE_TOPICS_INFORM(){
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;
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;
@Component
public class ReceiveHandler {
@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;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitApplication.class)
public class Producer05_topics_springboot {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void sendMessage4(){
Student student = new Student("张四", "123");
String s = JSONObject.toJSONString(student);
rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_TOPICS_INFORM,"gather_add",s);
}
}
二. 上源码