RabbitMQ
Docker安装RabbitMQ
docker run -d --hostname my-rabbit --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management
Spring Boot整合Rabbit MQ
配置MQ的基本信息
spring.rabbitmq.port=8888
spring.rabbitmq.host=120.25.241.237
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
Direct
-
配置队列
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 you猿 * @Date 2020/5/29 17:16 */ @Configuration public class RabbitDirectConfig { public final static String DIRECTNAME = "sang-direct"; @Bean Queue queue(){ return new Queue("hello-queue"); } @Bean DirectExchange directExchange(){ return new DirectExchange(DIRECTNAME,true,false); } @Bean Binding binding(){ return BindingBuilder.bind(queue()).to(directExchange()).with("direct"); } }
-
配置消费者
@Component public class DirectReceive { @RabbitListener(queues = "hello-queue") public void handler(String msg){ System.out.println("DirectReceive>>>>"+msg); } }
-
测试
@Autowired RabbitTemplate rabbitTemplate; @Test void contextLoads() { rabbitTemplate.convertAndSend("hello-queue","youyuan"); }
Fanout
步骤与上面类似
//1
@Configuration
public class RabbitFanoutConfig {
public final static String FANOUTNAME = "sang-fanout";
@Bean
FanoutExchange fanoutExchange(){
return new FanoutExchange(FANOUTNAME,true,false);
}
@Bean
Queue queueOne(){
return new Queue("queue-one");
}
@Bean
Queue queueTwo(){
return new Queue("queue-two");
}
@Bean
Binding bindingOne(){
return BindingBuilder.bind(queueOne()).to(fanoutExchange());
}
@Bean
Binding bindingTwo(){
return BindingBuilder.bind(queueTwo()).to(fanoutExchange());
}
}
//2.
package org.youyuan.rabbitmq.receive;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @Author you猿
* @Date 2020/5/29 19:10
*/
@Component
public class FanoutReceiver {
@RabbitListener(queues = "queue-one")
public void handler1(String msg){
System.out.println("FanoutReceiver:handler1="+msg);
}
@RabbitListener(queues = "queue-two")
public void handler2(String msg){
System.out.println("FanoutReceiver:handler1="+msg);
}
}
//3.
@Test
public void test1(){
rabbitTemplate.convertAndSend(RabbitFanoutConfig.FANOUTNAME,null,"hello youyuan");
}
Topic
//1
@Configuration
public class RabbitTopicConfig {
public final static String TOPICNAME = "sang-topic";
@Bean
TopicExchange topicExchange(){
return new TopicExchange(TOPICNAME,true,false);
}
@Bean
Queue xiaomi(){
return new Queue("xiaomi");
}
@Bean
Queue huawei(){
return new Queue("huawei");
}
@Bean
Queue phone(){
return new Queue("phone");
}
@Bean
Binding xiaomiBinding(){
return BindingBuilder.bind(xiaomi()).to(topicExchange()).with("xiaomi.#");
}
@Bean
Binding huaweiBinding(){
return BindingBuilder.bind(huawei()).to(topicExchange()).with("huawei.#");
}
@Bean
Binding phoneBinding(){
return BindingBuilder.bind(phone()).to(topicExchange()).with("phone.#");
}
}
//2
package org.youyuan.rabbitmq.receive;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @Author you猿
* @Date 2020/5/29 19:34
*/
@Component
public class TopicReceiver {
@RabbitListener(queues = "xiaomi")
public void handler1(String msg){
System.out.println("xiaomiReceiver"+msg);
}
@RabbitListener(queues = "huawei")
public void handler2(String msg){
System.out.println("huaweiReceiver"+msg);
}
@RabbitListener(queues = "phone")
public void handler3(String msg){
System.out.println("phoneReceiver"+msg);
}
}
//3.
@Test
public void test2(){
rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPICNAME,"xiaomi.news","小米新闻");
rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPICNAME,"huawei.news","华为新闻");
rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPICNAME,"phone.news","phone新闻");
}