我们先创建spring项目,
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.4.4</version>
</dependency>
生产者
创建一个生产者模块
application配置文件 我们这里的服务端口号:8081
spring:
rabbitmq:
host: 192.168.26.146
port: 5672
username: guest
password: guest
virtual-host: /yeb
server:
port: 8081
配置文件,这里主要是 声明队列、交换机、绑定交换机、队列
package org.example.config;
import com.rabbitmq.client.AMQP;
import net.minidev.json.JSONUtil;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
@Bean//声明对垒
public Queue queue(){
return new Queue("amqp_queue2");
}
@Bean//声明交换机
public TopicExchange topicExchange(){
return new TopicExchange("amqp_exchange2");
}
@Bean//绑定交换机和队列
public Binding binding(){
return BindingBuilder.bind(queue()).to(topicExchange()).with("*.amqp.#");}
}
我们在测试类中添加的启动文件,这里主要是使用了 rabbitTemplate 使用他下面的方法converAndSend(交换机,路由,信息)
package org.example.send;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
public class RabbitQMTest {
@Resource
private RabbitTemplate rabbitTemplate;
@Test
public void test1(){
String message="Hello";
System.out.println("发送消息:"+message);
//发送消息
rabbitTemplate.convertAndSend("amqp_exchange2","test.amqp",message);
}
}
package org.example.send;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
public class RabbitQMTest {
@Resource
private RabbitTemplate rabbitTemplate;
@Test
public void test1(){
String message="Hello";
System.out.println("发送消息:"+message);
//发送消息
rabbitTemplate.convertAndSend("amqp_exchange2","test.amqp",message);
}
}
消费者
配置文件 我们这里使用的端口号是8082 这样视为了避免与消费者同时启动发生端口号冲突。
spring:
rabbitmq:
host: 192.168.26.146
port: 5672
username: guest
password: guest
virtual-host: /yeb
server:
port: 8082
接受消息 主要是使用两个注解
@RabbitListener声明队列
@RabbitHandler 监听处理方法
package org.example;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "amqp_queue2")
public class RecvInit {
@RabbitHandler//监听之后获取消息的处理方法
public void testRecv(String message){
System.out.println("接收到消息:"+message);
}
}
启动类
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RecvApplication {
public static void main(String[] args) {
SpringApplication.run(RecvApplication.class,args);
}
}
我们先启动消费者、然后在启动生产者。