RabbitMQ路由模式
package com.java1234.producer.config;import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {/*** direct交换机名称*/public static final String DIRECT_EXCHANGE="directExchange";/*** direct交换机名称1*/public static final String DIRECT_EXCHANGE1="directExchange1";/*** fanout交换机名称*/public static final String FANOUT_EXCHANGE="fanoutExchange";/*** direct队列名称*/public static final String DIRECT_QUEUE="directQueue";/*** direct1队列名称*/public static final String DIRECT_QUEUE1="directQueue1";/*** direct2队列名称*/public static final String DIRECT_QUEUE2="directQueue2";/*** 订阅队列1名称*/public static final String SUB_QUEUE1="subQueue1";/*** 订阅队列2名称*/public static final String SUB_QUEUE2="subQueue2";/*** direct路由Key*/public static final String DIRECT_ROUTINGKEY="directRoutingKey";/*** 定义一个direct交换机* @return*/@Beanpublic DirectExchange directExchange(){return new DirectExchange(DIRECT_EXCHANGE);}/*** 定义一个direct交换机1* @return*/@Beanpublic DirectExchange directExchange1(){return new DirectExchange(DIRECT_EXCHANGE1);}/*** 定义一个direct交换机* @return*/@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange(FANOUT_EXCHANGE);}/*** 定义一个direct队列* @return*/@Beanpublic Queue directQueue(){return new Queue(DIRECT_QUEUE);}/*** 定义一个direct1队列* @return*/@Beanpublic Queue directQueue1(){return new Queue(DIRECT_QUEUE1);}/*** 定义一个direct2队列* @return*/@Beanpublic Queue directQueue2(){return new Queue(DIRECT_QUEUE2);}/*** 定义一个订阅队列1* @return*/@Beanpublic Queue subQueue1(){return new Queue(SUB_QUEUE1);}/*** 定义一个订阅队列2* @return*/@Beanpublic Queue subQueue2(){return new Queue(SUB_QUEUE2);}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding directBinding(){return BindingBuilder.bind(directQueue()).to(directExchange()).with(DIRECT_ROUTINGKEY);}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding fanoutBinding1(){return BindingBuilder.bind(subQueue1()).to(fanoutExchange());}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding fanoutBinding2(){return BindingBuilder.bind(subQueue2()).to(fanoutExchange());}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding directBinding1(){return BindingBuilder.bind(directQueue1()).to(directExchange1()).with("error");}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding directBinding2(){return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("info");}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding directBinding3(){return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("error");}/*** 定义一个队列和交换机的绑定* @return*/@Beanpublic Binding directBinding4(){return BindingBuilder.bind(directQueue2()).to(directExchange1()).with("warning");}}
package com.java1234.consumer.service.impl;import com.java1234.consumer.service.RabbitMqService;
import com.java1234.producer.config.RabbitMQConfig;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service("rabbitmqService")
public class RabbitMqServiceImpl implements RabbitMqService {@Autowiredprivate AmqpTemplate amqpTemplate;@Overridepublic void receiveMessage() {String message=(String) amqpTemplate.receiveAndConvert(RabbitMQConfig.DIRECT_QUEUE);System.out.println("接受到的mq消息:"+message);}@Override@RabbitListener(queues = {RabbitMQConfig.DIRECT_QUEUE1})public void receiveMessage2(String message) {//        System.out.println("消费者1:接收到的mq消息:"+message);System.out.println("队列1接收日志消息:"+message);}@Override@RabbitListener(queues = {RabbitMQConfig.DIRECT_QUEUE2})public void receiveMessage3(String message) {
//        System.out.println("消费者2:接收到的mq消息:"+message);System.out.println("队列2接收日志消息:"+message);}@Override@RabbitListener(queues = {RabbitMQConfig.SUB_QUEUE1})public void receiveSubMessage1(String message) {System.out.println("订阅者1:接收到的mq消息:"+message);}@Override@RabbitListener(queues = {RabbitMQConfig.SUB_QUEUE2})public void receiveSubMessage2(String message) {System.out.println("订阅者2:接收到的mq消息:"+message);}}
package com.java1234.consumer.service;public interface RabbitMqService {/*** 接受消息*/public void receiveMessage();/*** 接受消息*/public void receiveMessage2(String message);/*** 接受消息*/public void receiveMessage3(String message);/*** 接受订阅消息1*/public void receiveSubMessage1(String message);/*** 接受订阅消息2*/public void receiveSubMessage2(String message);
}
package com.java1234.consumer;import com.java1234.consumer.service.RabbitMqService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {ApplicationContext ac = SpringApplication.run(ConsumerApplication.class,args);
//        RabbitMqService rabbitMqService=(RabbitMqService) ac.getBean("rabbitmqService");
//        rabbitMqService.receiveMessage();}
}
package com.java1234.producer.service.impl;import com.java1234.producer.config.RabbitMQConfig;
import com.java1234.producer.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 {@Autowiredprivate AmqpTemplate amqpTemplate;/*** String exchange 交换机名称* String routingKey 路由Key* Object object 具体发送的消息* @param message*/@Overridepublic void sendMessage(String message) {amqpTemplate.convertAndSend(RabbitMQConfig.DIRECT_EXCHANGE,RabbitMQConfig.DIRECT_ROUTINGKEY,message);}@Overridepublic void sendFanoutMessage(String message) {amqpTemplate.convertAndSend(RabbitMQConfig.FANOUT_EXCHANGE,"",message);}@Overridepublic void sendRoutingMessage() {amqpTemplate.convertAndSend(RabbitMQConfig.DIRECT_EXCHANGE1,"warning","发送warning级别的消息");}
}
package com.java1234.producer.service;public interface RabbitMqService {/*** 发送消息* @param message*/public void sendMessage(String message);/*** 发送消息* @param message*/public void sendFanoutMessage(String message);/*** 发送路由模式消息*/public void sendRoutingMessage();
}
package com.java1234.producer;import com.java1234.producer.service.RabbitMqService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication
public class ProducerApplication {public static void main(String[] args) {ApplicationContext ac = SpringApplication.run(ProducerApplication.class, args);RabbitMqService rabbitMqService=(RabbitMqService) ac.getBean("rabbitmqService");rabbitMqService.sendRoutingMessage();//        for(int i=0;i < 10;i++){rabbitMqService.sendMessage("RabbitMQ大爷你好!!!"+i);
//             rabbitMqService.sendFanoutMessage(i+"用户欠费了");
//        }}
}