Fanout交换器-编写生产者

我们再来编写生产者,Provider,这里我们已经把消费者给写好了,一个SmsReceiver,一个PushReceiver,

先改一下,这是push receiver

@RabbitHandler
public void process(String msg){
	System.out.println("Push..........receiver: "+msg);
}

这样笔记里要重新替换一下,Consumer写好以后呢,我们回过来看Provider的写法,Provider的配置文件已经改好了,

我们把交换器的名称交换一下就可以了,然后我们再看sender这个类,在这个类当中呢,我们取交换器的名称,然后这里

没有路由键了,就可以把这个删掉,那么没有路由键了,在发送消息的时候,对于convertAndSend方法的第二个参数,

我们该怎么去办呢,注意,这里我们只要给空串就可以了,没有路由键的,我们只要给空串就可以了,这样我们的消息发送者,

就会交给我们的fanout交换器

public void send(String msg){
	//向消息队列发送消息
	//参数一:交换器名称。
	//参数二:路由键
	//参数三:消息
	this.rabbitAmqpTemplate.convertAndSend(this.exchange,"", msg);
}

fanout交换器再把消息广播到其他的队列当中,所以这块需要注意,把路由键去掉,换乘空串就可以了,接下来我们就来测试

一下,如果我们的服务端,Sender,发送一条数据,这条数据能不能同时发送到PushReceiver和SmsReceiver当中,我们先把消费者

启动,观察控制台,我们再去运行我们的测试代码,Provider的测试代码,这块我们也不用死循环了,直接发送Hello RabbitMQ,

我们来运行,观察控制台,我们可以看到,现在SMS Receiver和Push Receiver同时收到消息了

Push..........receiver: Hello RabbitMQ
Sms........receiver: Hello RabbitMQ

也就是说我现在这个消息,广播到了两个队列当中,这个不就是订阅两个队列对象吗,我们就直接输出两个相同的东西,

是不是Hello Rabbit其实最后你会发现,Fanout交换器,最大的区别,跟我们之前讲的Direct,和Topic,他们最大的区别是什么呢,

他并不会通过路由键的特点,去发送的一个过程,因为他没有路由键,没有路由键的是通过广播的方式发送到所有的队列当中,

那么其他的消息订阅者这一块,也不需要有路由键,因为一旦有路由键,就是从某个特定的队列了,所以这块需要注意,我们把

Provider的代码copy一下,还是比较简单的,只要改动一个地方,把路由键换成空串就可以了,把它整理到笔记当中,测试代码

什么都不用动,那我们的fanout交换器就讲解完了,希望能对这三种交换器,通过这三个案例呢,有一个本质上的一个认识,

区别,然后我们在开发的过程当中呢,可以根据自己的开发情况,需求,来决定,用哪种交换器来传递消息

  4.0.0
  com.learn
  rabbitmq-fanout-provider
  0.0.1-SNAPSHOT
  jar
  
	
		org.springframework.boot
		spring-boot-starter-parent
		1.5.12.RELEASE
		 
	
	
	
		UTF-8
		UTF-8
		1.8
		3.0.9.RELEASE
		2.2.2
	
	
	
		
			org.springframework.boot
			spring-boot-starter-amqp
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	
	
	
	
	    
	        
	            org.springframework.boot
	            spring-boot-maven-plugin
	        
	    
	
  
  
spring.application.name=rabbitmq-fanout-provider

spring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

mq.config.exchange=order.fanout
package com.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RabbitFanoutProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(RabbitFanoutProviderApplication.class, args);
	}
}
package com.learn.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.learn.RabbitFanoutProviderApplication;
import com.learn.Sender;

/**
 * 消息队列测试类
 * @author Administrator
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes=RabbitFanoutProviderApplication.class)
public class QueueTest {

	@Autowired
	private Sender sender;
	
	/*
	 * 测试消息队列
	 */
	@Test
	public void test1(){
		this.sender.send("Hello RabbitMQ");
	}
}

 

你可能感兴趣的:(Fanout交换器-编写生产者)