rabbitmq消息队列基本概念
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库
AMQP协议
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。
实例
配置文件
spring:
rabbitmq:
host: 127.0.0.1 #ip
port: 5672 #端口
username: 用户名
password: 密码
publisher-confirms: true
virtual-host: /
mq:
config:
exchange: SAP_INTERCHANGER #交换机名称
queue:
queuename: SAP_QUEUE #队列名称
生产者(直接spring注入,然后调用里面发送的方法)
@Component
public class SapDataProducer {
@Resource
private AmqpTemplate amqpTemplate;
/** 交换器名称,取配置文件中 */
@Value("${mq.config.exchange}")
private String exchange;
/**
* 发送消息到指定的交换机中
*/
public void send(List<Student> stus){
/**
* 向消息队列发送消息
* 参数一:交换器名称
* 参数二:路由键 空字符串,为广播模式
* 参数三:消息
*/
amqpTemplate.convertAndSend(exchange,"", JSONArray.toJSONString(stus,SerializerFeature.DisableCircularReferenceDetect));
}
}
消费者
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "${mq.config.queue.queuename}", autoDelete = "true"),
exchange = @Exchange(value = "${mq.config.exchange}", type = ExchangeTypes.FANOUT)
))
@Component
public class SapDataConsumer {
@RabbitHandler
public void sapProducer(String stus) {
//将Json字符串转换成对象
List<Student> list = JSONObject.parseArray(stus, Student.class);
//遍历打印即可
}
}