RabbitMQ

简介:MQ全称为Message Queue, 消息队列是一种应用程序对应用程序的通信方法,RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。可解耦,支持的协议多,非常重量级消息队列,对路由(Routing),负载均衡(Loadbalance)或者数据持久化都有很好的支持。

Springboot_RabbitMQ

pom:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
yml:
spring:
    rabbitmq:
        addresses: a6dev.epai.io:5672
        username: guest
        password: guest
        listener: # ack 手动机制
          simple:
            acknowledge-mode: manual
  • Topic转发模式
@Configuration
public class RabbitConfig  {
    /**
     * 创建消息队列
     * @Author Guanxiangfu
     * @Date 2017/11/23 18:42
     */
    @Bean(name="send")
    public Queue queueMessage() {
        //true为队列持久化
        return new Queue("send");
    }
    /**
     * 创建消息队列
     * @Author Guanxiangfu
     * @Date 2017/11/23 18:42
     */
    @Bean(name="message")
    public Queue queueMessages() {
        return new Queue("message");
    }
    /**
     * 创建交换器,管理接收类
     * @Author Guanxiangfu
     * @Date 2017/11/23 18:41
     */
    @Bean
    public TopicExchange exchange() {
        return new TopicExchange("exchange");
    }
    /**
     * todo:以下绑定消息队列创建完后可以不写,因为会自动匹配
     * @Author Guanxiangfu
     * @Date 2017/11/24 10:56
     */
    /**
     * 绑定队列
     * @Author Guanxiangfu
     * @Date 2017/11/23 18:43
     */
    @Bean
    Binding bindingExchangeMessage(@Qualifier("send") Queue queueMessage, TopicExchange exchange) {
        return BindingBuilder.bind(queueMessage).to(exchange).with("send");
    }
    /**
     * 绑定队列
     * @Author Guanxiangfu
     * @Date 2017/11/23 18:43
     */
    @Bean
    Binding bindingExchangeMessages(@Qualifier("message") Queue queueMessages, TopicExchange exchange) {
        return BindingBuilder.bind(queueMessages).to(exchange).with("message");//*表示一个词,#表示零个或多个词
    }
}
  • 接收消息
@Autowired
private AmqpTemplate rabbitTemplate;
@RabbitHandler
public void processSend(String routingKey) {
    Object o = this.rabbitTemplate.receiveAndConvert(routingKey);
    log.info("Receiver : " + o);
}
  • 发送消息
rabbitTemplate.convertAndSend(routingKey,message);
  • Channel通道设定(Declare模式)
@Autowired
private AmqpTemplate rabbitTemplate;
@Autowired
ConnectionFactory connectionFactory;
//rabbitmq进行发送数据
Channel channel=connectionFactory.createConnection().createChannel(false);
channel.queueDeclare(routingKey, true, false, false, null);
channel.queueBind(routingKey, exchange, routingKey);
log.info("Sender : " + message);
rabbitTemplate.convertAndSend(routingKey,message);
  • ack 确认返回机制(配合yml文件配置)
//channel.basicAck(string.getMessageProperties().getDeliveryTag(), false); // 消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息
 channel.basicNack(string.getMessageProperties().getDeliveryTag(), false, true); // ack返回false,并重新回到队列,api里面解释得很清楚
//channel.basicReject(string.getMessageProperties().getDeliveryTag(), true); // 拒绝消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值