1.使用direct交换机
消费者:
spring.rabbitmq.host=192.168.56.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
#交换机名称
mq.rabbit.direct.exchange=log.direct
#info队列名称
mq.rabbit.direct.queue.info=log.info
#info路由键
mq.rabbit.direct.routing.info=log.info.routing.key
#error队列名称
mq.rabbit.direct.queue.error=log.error
#error路由键
mq.rabbit.direct.routing.error=log.error.routing.key
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.info}",autoDelete = "true"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.DIRECT),
key = "${mq.rabbit.direct.routing.info}"
)
)
public class InfoConsumer {
@RabbitHandler
public void receive(String mes){
System.out.println("info........Receiver:"+mes);
}
}
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.error}",autoDelete = "true"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.DIRECT),
key = "${mq.rabbit.direct.routing.error}"
)
)
public class ErrorConsumer {
public void receive(String mes){
System.out.println("error.........Receiver:"+mes);
}
}
生产者:
spring.rabbitmq.host=192.168.56.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
#交换机名称
mq.rabbit.direct.exchange=log.direct
#info路由键
mq.rabbit.direct.routing.info=log.info.routing.key
#error路由键
mq.rabbit.direct.routing.error=log.error.routing.key
@Component
public class Provider {
@Autowired
AmqpTemplate template;
@Value("${mq.rabbit.direct.exchange}")
private String exchangeName;
@Value("${mq.rabbit.direct.routing.info}")
private String routingKey;
public void send(String mes){
template.convertAndSend(exchangeName,routingKey,mes);
}
}
测试类:
@SpringBootTest
class RabbitmqdirectproviderApplicationTests {
@Autowired
Provider provider;
@Test
void contextLoads() {
while (true){
provider.send("Hello happy");
}
}
}
2.使用topic交换机
消费者:
spring.rabbitmq.host=192.168.56.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
#交换机名称
mq.rabbit.direct.exchange=log.topic
#info队列名称
mq.rabbit.direct.queue.info=log.info
#error队列名称
mq.rabbit.direct.queue.error=log.error
#logs队列名称
mq.rabbit.direct.queue.logs=log.all
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.info}"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.TOPIC),
key = "*.log.info"
)
)
public class UserConsumer {
@RabbitHandler
public void receive(String mes){
System.out.println(".....Info.....Receiver....."+mes);
}
}
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.error}"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.TOPIC),
key = "*.log.error"
)
)
public class ProductConsumer {
@RabbitHandler
public void receive(String mes){
System.out.println(".....Error.....Receiver....."+mes);
}
}
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.logs}"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.TOPIC),
key = "*.log.*"
)
)
public class OrderConsumer {
@RabbitHandler
public void receive(String mes){
System.out.println(".....All.....Receiver....."+mes);
}
}
生产者:
spring.rabbitmq.host=192.168.56.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
#交换机名称
mq.rabbit.direct.exchange=log.topic
public class UserProvider {
@Autowired
AmqpTemplate template;
@Value("${mq.rabbit.direct.exchange}")
String exchangeName;
@RabbitHandler
public void send(String mes){
template.convertAndSend(exchangeName,"user.log.info",mes);
template.convertAndSend(exchangeName,"user.log.error",mes);
template.convertAndSend(exchangeName,"user.log.warn",mes);
template.convertAndSend(exchangeName,"user.log.debug",mes);
}
}
@Component
public class ProductProvider {
@Autowired
AmqpTemplate template;
@Value("${mq.rabbit.direct.exchange}")
String exchangeName;
@RabbitHandler
public void send(String mes){
template.convertAndSend(exchangeName,"product.log.info",mes);
template.convertAndSend(exchangeName,"product.log.error",mes);
template.convertAndSend(exchangeName,"product.log.warn",mes);
template.convertAndSend(exchangeName,"product.log.debug",mes);
}
}
@Component
public class OrderProvider {
@Autowired
AmqpTemplate template;
@Value("${mq.rabbit.direct.exchange}")
String exchangeName;
@RabbitHandler
public void send(String mes){
template.convertAndSend(exchangeName,"order.log.info",mes);
template.convertAndSend(exchangeName,"order.log.error",mes);
template.convertAndSend(exchangeName,"order.log.warn",mes);
template.convertAndSend(exchangeName,"order.log.debug",mes);
}
}
测试类:
@SpringBootTest
class RabbitmqtopicproviderApplicationTests {
@Autowired
UserProvider userProvider;
@Autowired
ProductProvider productProvider;
@Autowired
OrderProvider orderProvider;
@Test
void contextLoads() {
userProvider.send("Hello User");
productProvider.send("Hello Product");
orderProvider.send("Hello Order");
}
}
3使用fanout交换机
消费者:
spring.rabbitmq.host=192.168.56.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
#交换机名称
mq.rabbit.direct.exchange=log.fanout
#info队列名称
mq.rabbit.direct.queue.sms=log.sms
#info队列名称
mq.rabbit.direct.queue.service=log.service
mq.rabbit.direct.queue.phone=log.phone
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.sms}",autoDelete = "true"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.FANOUT)
)
)
public class SmsConsumer {
@RabbitHandler
public void receive(String mes){
System.out.println(".....Sms.....Receiver....."+mes);
}
}
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.service}",autoDelete = "true"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.FANOUT)
)
)
public class ServiceConsumer {
@RabbitHandler
public void receive(String mes){
System.out.println(".....Service.....Receiver....."+mes);
}
}
@Component
@RabbitListener(
bindings = @QueueBinding(
value = @Queue(value = "${mq.rabbit.direct.queue.phone}",autoDelete = "true"),
exchange = @Exchange(value = "${mq.rabbit.direct.exchange}",type = ExchangeTypes.FANOUT)
)
)
public class PhoneConsumer {
@RabbitHandler
public void receiver(String mes){
System.out.println(".....Phone.....Receiver....."+mes);
}
}
生产者:
spring.rabbitmq.host=192.168.56.122
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=111111
#交换机名称
mq.rabbit.direct.exchange=log.fanout
@Component
public class MyProvider {
@Autowired
AmqpTemplate template;
@Value("${mq.rabbit.direct.exchange}")
String exchangeName;
public void send(String mes){
template.convertAndSend(exchangeName,"",mes);
}
}
测试类:
@SpringBootTest
class RabbitmqfanoutproviderApplicationTests {
@Autowired
MyProvider provider;
@Test
void contextLoads() {
provider.send("Hello RabbitMQ");
}
}