文章太长,直接转载一下:https://blog.csdn.net/qq_35387940/article/details/100514134
简单代码演示:Direct
项目架构
一,rabbitmq
application.yml
server:
port: 9060
spring:
application:
name: rabbitmq
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
RabbitConfig
package com.test.rabbitmq;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Tyler
* @date 2021/3/25
*/
@Configuration
public class RabbitConfig {
@Bean
public Queue DirectQueue() {
return new Queue("DirectQueue",true);
}
@Bean
DirectExchange DirectExchange() {
return new DirectExchange("DirectExchange",true,false);
}
@Bean
Binding bindingDirect() {
return BindingBuilder.bind(DirectQueue()).to(DirectExchange()).with("DirectRouting");
}
}
SendController
@RestController
@RequestMapping("send")
public class SendController {
@Autowired
RabbitTemplate rabbitTemplate; //使用RabbitTemplate,这提供了接收/发送等等方法
@GetMapping("/sendMessage")
public String sendMessage() {
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "test message, hello!";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String,Object> map=new HashMap<>();
map.put("messageId",messageId);
map.put("messageData",messageData);
map.put("createTime",createTime);
rabbitTemplate.convertAndSend("DirectExchange", "DirectRouting", map);
return "ok";
}
}
二,service1
application.yml
server:
port: 9040
spring:
application:
name: service1
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
DirectReceiver
@Component
@RabbitListener(queues = "DirectQueue")//监听的队列名称 TestDirectQueue
public class DirectReceiver {
@RabbitHandler
public void process(Map testMessage) {
System.out.println("DirectReceiver消费者收到消息 : " + testMessage.toString());
}
}
DirectReceiverNew
@Component
@RabbitListener(queues = "DirectQueue")//监听的队列名称 TestDirectQueue
public class DirectReceiverNew {
@RabbitHandler
public void process111(Map testMessage) {
System.out.println("DirectReceiver11111111消费者收到消息 : " + testMessage.toString());
}
}
RabbitConfig 不需要
三,测试
启动 rabbitmq和service1后,通过postman请求 rabbitmq中的sendMessage,
结果如下:自动负载均衡了