springBoot整合RabbitMQ(Demo)

由于我之前拿activeMQ写完了,但是总监说,他们用的rabbitMQ,为了保证统一,所以要求我重写。

我发现他和activeMQ不同的是,他不需要去通过config去定义value获取yum的配置。创建类,他就能自动读取yum关于rabbitMQ的配置。

并且他能够直接支持对象的传递,而active需要转换为byte字节或者序列化。

感觉rabbitMQ比activeMq好用

这里只说直连Direct的情况(符合我想要的1对1)

1.导包


    org.springframework.boot
    spring-boot-starter-amqp

2.导入配置在yml

rabbitmq:
  host: 192.168.67.95
  port: 5672
  username: admin
  password: 12345678

3.配置类编写

package ljqc.conf;




import org.springframework.amqp.core.DirectExchange;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import org.springframework.amqp.core.Queue;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;



/**
 * 配置类
 */
@Configuration

public class DirectRabbitConfig {






    //队列 起名:TestDirectQueue
    @Bean
    public Queue TestDirectQueue() {
        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
        //   return new Queue("TestDirectQueue",true,true,false);

        //一般设置一下队列的持久化就好,其余两个就是默认false
        return new Queue("TestDirectQueue",true);
    }



    //Direct交换机 起名:TestDirectExchange
    @Bean
    DirectExchange TestDirectExchange() {
        //  return new DirectExchange("TestDirectExchange",true,true);
        return new DirectExchange("TestDirectExchange",true,false);
    }

    //绑定  将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with("TestDirectRouting");
    }



    @Bean
    DirectExchange lonelyDirectExchange() {
        return new DirectExchange("lonelyDirectExchange");
    }





}

4.生产者编写

package ljqc.Controller;

import ljqc.bean.TaskInfoBean;
import ljqc.tools.DataProcessUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;


import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


@RestController
public class ProducerController {
    @Autowired
    RabbitTemplate rabbitTemplate;  //使用RabbitTemplate,这提供了接收/发送等等方法

    @GetMapping("/sendDirectMessage")
    public String sendDirectMessage() {
        String messageId = String.valueOf(UUID.randomUUID());
        String messageData = "test message, hello!";
        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        Map map=new HashMap<>();
        map.put("messageId",messageId);
        map.put("messageData",messageData);
        map.put("createTime",createTime);
        //将消息携带绑定键值:TestDirectRouting 发送到交换机TestDirectExchange
        rabbitTemplate.convertAndSend("TestDirectExchange", "TestDirectRouting", map);
        return "ok";
    }



}

5.启动项目,请求一下。

去rabbitMQ服务的gui页面看一下(端口号15672),确实存入队列中了

 6. 编写消费者

package ljqc.Controller;


import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.sql.Connection;
import java.util.Map;

@RestController
@RabbitListener(queues = "TestDirectQueue", concurrency ="1" )//监听的队列名称 TestDirectQueue
public class QueueConsumerListener {


    @RabbitHandler
    public void process(Map testMessage) {
        System.out.println("DirectReceiver消费者收到消息  : " + testMessage.toString());
    }
}

7.消费成功

 

参考:Springboot 整合RabbitMq ,用心看完这一篇就够了_默默不代表沉默-CSDN博客_springboot整合rabbitmq

理解 RabbitMQ Exchange_杏仁技术站-CSDN博客

你可能感兴趣的:(基础操作,rabbitmq,spring,boot,java)