RabbitMQ的基本使用(SpringBoot)

首先第一步永远是引入依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>

并在配置文件添加配置

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

然后方法和activeMQ差不多,建立个发送方,建立个接收方

package com.sola.postmsg;

import java.sql.Date;

import org.apache.tomcat.jni.Time;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author JAVA
 *	MQ发送方
 */
@Component
public class RabbitMQSend {

	//重点在这 要用模板类
	@Autowired
	private AmqpTemplate amqptemplate;
	
	public void sendMsg(String msg){
		
		amqptemplate.convertAndSend("mymsg",msg+"~~~");
		
	}
}
package com.sola.getmessage;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author SOLA
 *	接收MQ消息
 */
@Component
public class RabbitMQMessageReceiver{

	@RabbitListener(queues = "mymsg")
	public void process(String msg){
		
		System.err.println("接收到的msg是"+msg);
	}
}

然后我这里写了个接口进行调用

	@GetMapping(value="rabbitsimpletest")
	@ApiOperation("RabbitMQ简单的队列测试")
	public void rabbitTest(){
		
		send.sendMsg("RabbitMQ我来了");
	}

然后运行,不出意外报错了。

看着像是找不到这个命名的队列。。。。然后我们去前端管理界面新建一个名为mymsg的队列

然后再运行就可以了,实际测试成功

运行虽然成功了 但是手动添队列太二了,下面我们在程序里加在接收端


/**
 * @author SOLA
 *	接收MQ消息
 */
@Component
public class RabbitMQMessageReceiver{

	/*@RabbitListener(queues = "mymsg")*/
	//@RabbitListener(queuesToDeclare="mymsg") 这么写会报错,因为参数类型是一个消息队列的数组
	@RabbitListener(queuesToDeclare=@Queue("mymsg"))
	public void process(String msg){
		
		System.err.println("接收到的msg是"+msg);
	}
}

这样 咱们去前端删除队列 然后再运行程序 就会发现 队列自动创建了。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

RabbitMQ好像不像和ActiveMQ一样 要单独创建TOPIC,RabbitMQ好像是需要什么功能就绑定什么Exchanges实现什么功能。

下面是绑定代码

package com.sola.getmessage;

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author SOLA
 *	接收MQ消息
 */
@Component
public class RabbitMQMessageReceiver{

	/*@RabbitListener(queues = "mymsg")*/
	//@RabbitListener(queuesToDeclare="mymsg") 这么写会报错,因为参数类型是一个消息队列的数组
	//@RabbitListener(queuesToDeclare=@Queue("mymsg"))
	//新重点
	@RabbitListener(bindings=@QueueBinding(
			value=@Queue("mysolamsg"),
			exchange=@Exchange("myexchange")
			))
	public void process(String msg){
		
		System.err.println("接收到的msg是"+msg);
	}
}

然后去前端看页面就发现已经绑定了

下面我们有个实际应用场景,一个订单服务对应两个商品服务。

 数码商只关注数码产品的订单,而水果供应商只需要水果的订单。

然而需要这么做的话需要消息分组,首先先建立两个消息接收端

	//数码供应商服务 接收消息
	@RabbitListener(bindings=@QueueBinding(
			exchange=@Exchange("myOrder"),
			key = "computer",
			value=@Queue("computerOrder")
			))
	public void computerMsg(String msg){
		
		System.err.println("数码供应商接到的消息"+msg);
	}
	
	//水果供应商服务 接收消息
	@RabbitListener(bindings=@QueueBinding(
			exchange=@Exchange("myOrder"),
			key = "fruit",
			value=@Queue("fruitOrder")
			))
	public void fruitMsg(String msg){
		
		System.err.println("水果供应商接到的消息"+msg);
	}

然后去建立消息的发送并调用

@Component
public class RabbitMQSend {

	//重点在这 要用模板类
	@Autowired
	private AmqpTemplate amqptemplate;
	
	public void sendMsg(String msg){
		
		amqptemplate.convertAndSend("mysolamsg",msg+"~~~");
		
	}
	//分组发送消息
	public void sendOtherOrder(String msg){
		
		//这回要填写三个参数,第一个参数exchange 绑定,第二个参数 分组的key
		amqptemplate.convertAndSend("myOrder","computer",msg);
		
	}
}
	@GetMapping(value="groupOrder")
	@ApiOperation("RabbitMQ分组发送消息")
	public void groupOrder(String str){
		
		send.sendOtherOrder(str);
	}

这样他就滚到数码商那边去了

猜你喜欢

转载自blog.csdn.net/jiulanhao/article/details/82759972