1.公共模块
pom引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
新增RabbitMQConfig.java
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMqConfig2 {
/**
* direct交换机名称
*/
public static final String DIRECT_EXCHANGE = "directExchange";
/**
* direct队列名称
*/
public static final String DIRECT_QUEUE = "directQueue";
public static final String DIRECT_ROUTING_KEY = "directRoutingKey";
/**
* 定义一个direct交换机
* @return
*/
@Bean
public DirectExchange directExchange(){
return new DirectExchange(DIRECT_EXCHANGE);
}
/**
* 定义一个direct队列
* @return
*/
@Bean
public Queue directQueue(){
return new Queue(DIRECT_QUEUE);
}
@Bean
public Binding directBinding(){
return BindingBuilder.bind(directQueue()).to(directExchange()).with(DIRECT_ROUTING_KEY);
}
}
Queue有几个重载方法,其中几个参数:

- durable:是否持久化,值为true时交换机或者队列会存到本地文件数据库,当mq重启数据不会丢失,false的话,重启或者断电,数据就没了。默认为true。
- exclusive:是否独占,true的话只有一个消费者监听这个队列。默认为false。
- autoDelete:是否自动删除,true当没有消费者的时候,自动删除。默认为false。
2、生产者Producer实现
pom引入共公模块。
application.yml配置
server:
port: 8081
spring:
rabbitmq:
host: 192.168.19.183
port: 5672
username: guest
password: guest
virtual-host: /
- rabbitmq.host修改为自己的服务器ip
- username和password修改为自己对应的账号密码。
- virtual-host默认 /
定义接口RabbitMqService
public interface RabbitMqService {
public void sendMessage(String message);
}
实现类RabbitMqServiceImpl
import com.example.config.RabbitMqConfig;
import com.example.service.RabbitMqService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("rabbitMqService")
public class RabbitMqServiceImpl implements RabbitMqService {
@Autowired
private AmqpTemplate amqpTemplate;
/**
* exchange 交换机名称
* routingkey 路径key
* @param message
*/
@Override
public void sendMessage(String message) {
amqpTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE,RabbitMqConfig.DIRECT_ROUTING_KEY,message);
}
}
启动类中测试投递消息
@SpringBootApplication
public class ProducerMain {
public static void main(String[] args) {
ApplicationContext run = SpringApplication.run(ProducerMain.class);
RabbitMqService rabbitMqService = (RabbitMqService)run.getBean("rabbitMqService");
rabbitMqService.sendMessage("hello rabbitmq");
}
}
可登录控制台查看相关信息

3、消费者Consumer实现
引入公共模块。
application.yml配置
rabbitmq的配置与生产者一致
server:
port: 8080
spring:
rabbitmq:
host: 192.168.19.183
port: 5672
username: guest
password: guest
virtual-host: /
定义接口RabbitMqService
public interface RabbitMqService {
public void receiveMessage();
}
实现类RabbitMqServiceImpl
@Service("rabbitMqService")
public class RabbitMqServiceImpl implements RabbitMqService {
@Autowired
private AmqpTemplate amqpTemplate;
@Override
public void receiveMessage() {
String msg = (String)amqpTemplate.receiveAndConvert(RabbitMqConfig.DIRECT_QUEUE);
System.out.println("接受到的mq消息:"+msg);
}
}
测试调用接口获取消息
public static void main(String[] args) {
ApplicationContext run = SpringApplication.run(CustmoerMain.class);
RabbitMqService rabbitMqService = (RabbitMqService)run.getBean("rabbitMqService");
rabbitMqService.receiveMessage();
}
}
运行消费者程序,输出结果:

使用监听方式:
@Override
@RabbitListener(queues = {RabbitMqConfig.DIRECT_QUEUE})
public void receiveMessage2(String message) {
System.out.println("实时获取到的mq消息:"+message);
}
生产者重新发消息,然后验证消费者是否能获取
