zoukankan      html  css  js  c++  java
  • SpringBoot简单配置RebbitMq(含源码)

    安装RebbitMq可以参考:https://blog.csdn.net/qq_47588845/article/details/107986373

    1.添加依赖

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

    2.添加配置

    spring:
      #配置rabbitMq 服务器
      rabbitmq:
        host: 127.0.0.1
        port: 5672
        username: guest
        password: guest

    3.添加配置类DirectRabbitConfig

    package com.llltony.springboot.utils;
    
    import org.apache.log4j.Logger;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.DirectExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * DirectRabbitConfig
     *
     * @author: lll
     * @date: 2021年04月11日 15:04:38
     */
    @Configuration
    public class DirectRabbitConfig {
    
    
    
        //队列 起名:EmployeeDirectQueue
        @Bean
        public Queue EmployeeDirectQueue() {
            // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
            // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
            // autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
            //   return new Queue("EmployeeDirectQueue",true,true,false);
    
            //一般设置一下队列的持久化就好,其余两个就是默认false
            return new Queue("EmployeeDirectQueue",true);
        }
    
        //Direct交换机 起名:EmployeeDirectExchange
        @Bean
        DirectExchange EmployeeDirectExchange() {
            //  return new DirectExchange("EmployeeDirectExchange",true,true);
            return new DirectExchange("EmployeeDirectExchange",true,false);
        }
    
        //绑定  将队列和交换机绑定, 并设置用于匹配键:EmployeeDirectRouting
        @Bean
        Binding bindingDirect() {
            return BindingBuilder.bind(EmployeeDirectQueue()).to(EmployeeDirectExchange()).with("EmployeeDirectRouting");
        }
    
    
    
        @Bean
        DirectExchange lonelyDirectExchange() {
            return new DirectExchange("lonelyDirectExchange");
        }
    
    
    
    }

    4.添加监听类DirectReceiver

    package com.llltony.springboot.listener;
    
    import org.apache.log4j.Logger;
    import org.springframework.amqp.rabbit.annotation.RabbitHandler;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    import java.util.Map;
    
    /**
     * 消费者队列监听
     *
     * @author: lll
     * @date: 2021年04月11日 16:04:14
     */
    @Component
    @RabbitListener(queues = "EmployeeDirectQueue")//监听的队列名称 EmployeeDirectQueue
    public class DirectReceiver {
    
        private static final Logger logger = Logger.getLogger(com.llltony.springboot.service.Impl.EmployeeServiceImpl.class);
    
        @RabbitHandler
        public void process(Map testMessage) {
            logger.info("DirectReceiver消费者收到消息  : " + testMessage.toString());
        }
    
    }

    5.添加调用

    package com.llltony.springboot.controller;
    
    
    import com.llltony.springboot.bean.Employee;
    import com.llltony.springboot.bean.EmployeeVo;
    import com.llltony.springboot.bean.ResultMap;
    import com.llltony.springboot.service.EmployeeService;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import javax.annotation.Resource;
    import java.io.IOException;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.UUID;
    
    @RestController
    @RequestMapping("/employee")
    public class EmployeeController {
    
        @Resource
        EmployeeService employeeService;
    
        @Resource
        RabbitTemplate rabbitTemplate;//通过消息队列异步增加学生
        @RequestMapping(value = "/addRebbitMq", method = RequestMethod.POST)
        public ResultMap addRebbitMq(@RequestBody EmployeeVo employeeVo) {
            ResultMap resultMap = new ResultMap();
            try {
                String messageId = String.valueOf(UUID.randomUUID());
                String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                Map<String, Object> map = new HashMap<>();
                map.put("messageId", messageId);
                map.put("messageData", employeeVo);
                map.put("createTime", createTime);
                //将消息携带绑定键值:TestDirectRouting 发送到交换机TestDirectExchange
                rabbitTemplate.convertAndSend("EmployeeDirectExchange", "EmployeeDirectRouting", map);
    //            employeeService.saveEmp(employeeVo);
                resultMap.setStatus("200");
                resultMap.setMessage("保存成功");
            } catch (Exception e) {
                resultMap.setStatus("500");
                resultMap.setMessage("保存失败");
            }
            return resultMap;
        }
    }

    6.实际效果

     

     7.资源

    源码:https://github.com/CodingPandaLLL/tsl.git

    源码压缩包地址:https://codeload.github.com/CodingPandaLLL/tsl/zip/refs/tags/1.0.3

    作者:CodingPanda
    座中铭:润物细无声,功到自然成
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    POJ1001 Exponentiation
    centos 在安装YouCompleteMe时提示 Fatal : pyconfig.h No such file or directory
    VMware12上安装CentOS无法上网问题
    mysql报错:/usr/sbin/mysqld:unknown variable 'default-character-set=utf8'
    centos7 python3.5安装mysqlclient1.3.9
    DirectDraw创建Windows窗口
    二进制移位溢出
    格式化时间 与 时间戳的转换
    ADO 读取 ACCESS
    Windows DOS 窗口设置字体颜色
  • 原文地址:https://www.cnblogs.com/LiLiliang/p/14644587.html
Copyright © 2011-2022 走看看