RabbitMQ实战.docx

上传人:b****6 文档编号:5822918 上传时间:2023-01-01 格式:DOCX 页数:17 大小:678.76KB
下载 相关 举报
RabbitMQ实战.docx_第1页
第1页 / 共17页
RabbitMQ实战.docx_第2页
第2页 / 共17页
RabbitMQ实战.docx_第3页
第3页 / 共17页
RabbitMQ实战.docx_第4页
第4页 / 共17页
RabbitMQ实战.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

RabbitMQ实战.docx

《RabbitMQ实战.docx》由会员分享,可在线阅读,更多相关《RabbitMQ实战.docx(17页珍藏版)》请在冰豆网上搜索。

RabbitMQ实战.docx

RabbitMQ实战

Springboot整合RabbitMQ

依赖

org.springframework.boot

spring-boot-starter-amqp

配置

spring:

application:

name:

rabbitmq

rabbitmq:

host:

127.0.0.1

port:

5672

username:

guest

password:

guest

publisher-returns:

true

publisher-confirms:

true

Queue配置

packagecom.neo.config;

importorg.springframework.amqp.core.Queue;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.Configuration;

@Configuration

publicclassQueueConfig{

@Bean

publicQueuecreateQueue(){

returnnewQueue("hello-queue");

}

@Bean

publicQueuecreate2Queue(){

returnnewQueue("hello2-queue");

}

}

Sender:

packagecom.neo.sender;

importorg.springframework.amqp.core.AmqpTemplate;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.stereotype.Component;

@Component

publicclassSender{

@Autowired

AmqpTemplateamqp;

publicvoidsend(Stringmessage){

amqp.convertAndSend("hello-queue",message);

}

publicStringsendAndReceive(Stringmessage){

return(String)amqp.convertSendAndReceive("hello2-queue",message);

}

}

Receiver:

packagecom.neo.receiver;

importorg.springframework.amqp.rabbit.annotation.RabbitListener;

importorg.springframework.stereotype.Component;

@Component

publicclassReceiver{

@RabbitListener(queues="hello-queue")

publicvoidreceive(Stringmessage){

System.out.println("接收消息:

"+message);

}

@RabbitListener(queues="hello2-queue")

publicStringreceiveAndSend(Stringmessage){

System.out.println("接收消息:

"+message);

returnmessage+"receiveBack";

}

}

Direct交换器:

(直接匹配)(一对一)

DirectExchange 

 处理路由键。

需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。

这是一个完整的匹配。

如果一个队列绑定到该交换机上要求路由键“test”,则只有被标记为“test”的消息才被转发,不会转发test.aaa,也不会转发dog.123,只会转发test。

创建队列和交换机

packagecom.neo.config;

importorg.springframework.amqp.core.DirectExchange;

importorg.springframework.amqp.core.Exchange;

importorg.springframework.amqp.core.Queue;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.Configuration;

@Configuration

publicclassDirectQueueConfig{

@Bean

publicQueuecreateInfoQueue(){

returnnewQueue("info.queue");

}

@Bean

publicQueuecreateErrorQueue(){

returnnewQueue("error.queue");

}

@Bean

publicExchangecreateLogExchange(){

returnnewDirectExchange("log.direct");

}

}

编写receiver

InfoReceiver:

packagecom.neo.receiver;

importorg.springframework.amqp.core.ExchangeTypes;

importorg.springframework.amqp.rabbit.annotation.Exchange;

importorg.springframework.amqp.rabbit.annotation.Queue;

importorg.springframework.amqp.rabbit.annotation.QueueBinding;

importorg.springframework.amqp.rabbit.annotation.RabbitHandler;

importorg.springframework.amqp.rabbit.annotation.RabbitListener;

importorg.springframework.stereotype.Component;

@Component

/**

*@RabbitListenerbindings:

绑定队列

*@QueueBindingexchange:

交换器

*@QueueBindingkey:

指定路由

*@QueueBindingvalue:

队列名

*@Exchangetype:

指定具体的交换器类型

*@QueueautoDelete:

是否是一个可删除的临时队列,springboot2.0报错

*/

@RabbitListener(

bindings=@QueueBinding(

exchange=@Exchange(name="log.direct",type=ExchangeTypes.DIRECT),

value=@Queue(name="info.queue"),

key="info.routing.key"

publicclassInfoReceiver{

@RabbitHandler

publicvoidreceive(Stringmessage){

System.out.println("接收info消息:

"+message);

}

}

ErrorReceiver:

packagecom.neo.receiver;

importorg.springframework.amqp.core.ExchangeTypes;

importorg.springframework.amqp.rabbit.annotation.Exchange;

importorg.springframework.amqp.rabbit.annotation.Queue;

importorg.springframework.amqp.rabbit.annotation.QueueBinding;

importorg.springframework.amqp.rabbit.annotation.RabbitHandler;

importorg.springframework.amqp.rabbit.annotation.RabbitListener;

importorg.springframework.stereotype.Component;

@Component

@RabbitListener(

bindings=@QueueBinding(

exchange=@Exchange(name="log.direct",type=ExchangeTypes.DIRECT),

value=@Queue(name="error.queue"),

key="error.routing.key"

publicclassErrorReceiver{

@RabbitHandler

publicvoidreceive(Stringmessage){

System.out.println("接收eror消息:

"+message);

}

}

Sender:

packagecom.neo.sender;

importorg.springframework.amqp.core.AmqpTemplate;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.stereotype.Component;

@Component

publicclassSender{

@Autowired

AmqpTemplateamqp;

publicvoidsendInfo(Stringmessage){

amqp.convertAndSend("log.direct","info.routing.key",message);

}

publicvoidsendError(Stringmessage){

amqp.convertAndSend("log.direct","error.routing.key",message);

}

}

Topic交换器:

(规则匹配)(多对多)

TopicExchange 

 将路由键和某模式进行匹配。

此时队列需要绑定要一个模式上。

符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。

因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*”只会匹配到“audit.irs”。

创建队列和路由

packagecom.neo.config;

importorg.springframework.amqp.core.Exchange;

importorg.springframework.amqp.core.Queue;

importorg.springframework.amqp.core.TopicExchange;

importorg.springframework.context.annotation.Bean;

importorg.springframework.context.annotation.Configuration;

@Configuration

publicclassTopicQueueConfig{

@Bean

publicQueuecreateInfoQueue(){

returnnewQueue("log.info");

}

@Bean

publicQueuecreateErrorQueue(){

returnnewQueue("log.error");

}

@Bean

publicQueuecreateDebugQueue(){

returnnewQueue("log.debug");

}

@Bean

publicQueuecreateAllQueue(){

returnnewQueue("log.all");

}

@Bean

publicExchangecreateLogExchange(){

returnnewTopicExchange("log.topic");

}

}

创建sender

UserSender

packagecom.neo.sender;

importorg.springframework.amqp.core.AmqpTemplate;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.stereotype.Component;

@Component

publicclassUserSender{

@Autowired

AmqpTemplateamqp;

publicvoidsendInfo(Stringmessage){

amqp.convertAndSend("log.topic","user.log.info","user.log.info"+message);

amqp.convertAndSend("log.topic","user.log.error","user.log.error"+message);

amqp.convertAndSend("log.topic","user.log.debug","user.log.debug"+message);

amqp.convertAndSend("log.topic","user.log.warn","user.log.warn"+message);

}

}

ProductSender

packagecom.neo.sender;

importorg.springframework.amqp.core.AmqpTemplate;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.stereotype.Component;

@Component

publicclassProductSender{

@Autowired

AmqpTemplateamqp;

publicvoidsendInfo(Stringmessage){

amqp.convertAndSend("log.topic","product.log.info","product.log.info"+message);

amqp.convertAndSend("log.topic","product.log.error","product.log.error"+message);

amqp.convertAndSend("log.topic","product.log.debug","product.log.debug"+message);

amqp.convertAndSend("log.topic","product.log.warn","product.log.warn"+message);

}

}

OrderSender:

packagecom.neo.sender;

importorg.springframework.amqp.core.AmqpTemplate;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.stereotype.Component;

@Component

publicclassOrderSender{

@Autowired

AmqpTemplateamqp;

publicvoidsendInfo(Stringmessage){

amqp.convertAndSend("log.topic","order.log.info","order.log.info"+message);

amqp.convertAndSend("log.topic","order.log.error","order.log.error"+message);

amqp.convertAndSend("log.topic","order.log.debug","order.log.debug"+message);

amqp.convertAndSend("log.topic","order.log.warn","order.log.warn"+message);

}

}

创建Receiver

LogsReceiver

packagecom.neo.receiver;

importorg.springframework.amqp.core.ExchangeTypes;

importorg.springframework.amqp.rabbit.annotation.Exchange;

importorg.springframework.amqp.rabbit.annotation.Queue;

importorg.springframework.amqp.rabbit.annotation.QueueBinding;

importorg.springframework.amqp.rabbit.annotation.RabbitHandler;

importorg.springframework.amqp.rabbit.annotation.RabbitListener;

importorg.springframework.stereotype.Component;

@Component

@RabbitListener(

bindings=@QueueBinding(

exchange=@Exchange(name="log.topic",type=ExchangeTypes.TOPIC),

value=@Queue(name="log.all"),

key="*.log.*"

publicclassLogsReceiver{

@RabbitHandler

publicvoidreceive(Stringmessage){

System.out.println("接收log.all消息:

"+message);

}

}

InfoReceiver

packagecom.neo.receiver;

importorg.springframework.amqp.core.ExchangeTypes;

importorg.springframework.amqp.rabbit.annotation.Exchange;

importorg.springframework.amqp.rabbit.annotation.Queue;

importorg.springframework.amqp.rabbit.annotation.QueueBinding;

importorg.springframework.amqp.rabbit.annotation.RabbitHandler;

importorg.springframework.amqp.rabbit.annotation.RabbitListener;

importorg.springframework.stereotype.Component;

@Component

@RabbitListener(

bindings=@QueueBinding(

exchange=@Exchange(name="log.topic",type=ExchangeTypes.TOPIC),

value=@Queue(name="log.info"),

key="*.log.info"

publicclassInfoReceiver{

@RabbitHandler

publicvoidreceive(Stringmessage){

System.out.println("接收log.info消息:

"+message);

}

}

ErrorReceiver

packagecom.neo.receiver;

importorg.springframework.amqp.core.ExchangeTypes;

importorg.springframework.amqp.rabbit.annotation.Exchange;

importorg.springframework.amqp.rabbit.annotation.Queue;

importorg.springframework.amqp.rabbit.annotation.QueueBinding;

importorg.springframework.amqp.rabbit.annotation.RabbitHandler;

importorg.springframework.amqp.rabbit.annotation.RabbitListener;

importorg.springframework.stereotype.Component;

@Component

@RabbitListener(

bindings=@QueueBinding(

exchange=@Exchange(name="log.topic",type=ExchangeTypes.TOPIC),

value=@Queue(name="log.error"),

key="*.log.error"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1