消息发送者
导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<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>
</dependencies>
配置文件
spring:
application:
name: test‐rabbitmq‐producer
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest // rabbit 登录账号
password: guest // rabbit 登录密码
virtualHost: /
server:
port: 8888
配置类
@Configuration
public class RabbitMqConfig {
public static final String QUEUE_NAME = "queue_test"; // 队列名
public static final String EXCHANGE_NAME = "exchange_test"; // 交换机名
public static final String ROUTING_KEY = "test.*"; // ROUTING_KEY
// 配置交换机
@Bean(EXCHANGE_NAME)
public Exchange exchange(){
// ExchangeBuilder.fanoutExchange(EXCHANGE_NAME); fanout 类型交互机
// ExchangeBuilder.directExchange(EXCHANGE_NAME); direct 类型交互机
// ExchangeBuilder.headersExchange(EXCHANGE_NAME); headers 类型交互机
//durable(true) 持久化 消息队列重启后 交换机仍然存在
return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
// 配置队列
@Bean(QUEUE_NAME)
public Queue queue(){
Queue queue = new Queue(QUEUE_NAME);
return queue;
}
// 绑定队列到交换机
@Bean
public Binding binding(@Qualifier(QUEUE_NAME)Queue queue,@Qualifier(EXCHANGE_NAME)Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY).noargs();
}
}
发送消息
@SpringBootTest
@RunWith(SpringRunner.class)
public class AppTest {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
public void shouldAnswerWithTrue() {
for (int i = 0; i < 10; i++){
String message = "hello word" + i;
rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME,"test.hehe",message);
System.out.println("Send Message " + message);
}
}
}
打开浏览器输入 http://localhost:15672/ 输入账号密码
点击Exchanges 可以看到配置的交互机名称
点击Queues 队列 可以看到配置的队列名称
点击 queue_test
消息接收者
从消息发送者copy RabbitMqConfig配置类
创建消息监听类
@Component
public class ReceiveHandler {
// 监听队列
@RabbitListener(queues = {RabbitMqConfig.QUEUE_NAME})
public void listenerQueue(String msg){
System.out.println(msg);
}
}
启动消费者
控制台输出
因为消息队列里面有10条消息未消费 启动消费者后 消费者监听到消息队列里的消息 会自动消费
刷新队列 消息已消费
来源:CSDN
作者:qq_42913304
链接:https://blog.csdn.net/qq_42913304/article/details/103653053