zoukankan      html  css  js  c++  java
  • springboot整合rabbitmq

    1.先引入Rabbitmq的starter

    2.在Application.properties文件中配置rabbitmq

    #rabbitmq主机地址
    spring.rabbitmq.host=192.168.144.143
    #rabbitmq端口号 spring.rabbitmq.port=5672
    #rabbitmq用户名 spring.rabbitmq.username=guest
    #rabbitmq密码 spring.rabbitmq.password=guest
    #rabbitmq虚拟主机 spring.rabbitmq.virtual-host=/

    3.因为springboot直接引入rabbitmq默认的序列化方式是jdk的即存入rabbitmq队列中的数据是字节数据。通常我们为了开发方便需要将其转换成json格式的存入rabbitmq服务器,所以我们需要编写一个配置类将其转换成json

    package com.atguigu.config;
    
    import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
    import org.springframework.amqp.support.converter.MessageConverter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MyAMQPConfig {
        /**
         * 将存入rabbitmq队列中的序列化方式换成json序列化方式
         * @return
         */
        @Bean
        public MessageConverter messageConverter(){
            return new Jackson2JsonMessageConverter();
        }
    }
    

    4.RabbitMQ常用方法

    package com.atguigu;
    
    import com.atguigu.vo.Book;
    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Exchange;
    import org.springframework.amqp.core.FanoutExchange;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    
    @SpringBootTest
    class SpringbootRabbitmqApplicationTests {
        @Autowired
        RabbitTemplate rabbitTemplate;//用来发送和接收数据
        @Autowired
        AmqpAdmin amqpAdmin;//用来自动创建或删除 交换器,队列,绑定
    
        @Test
        void send() {
            Map<String,Object> map=new HashMap<>();
            map.put("msg","这是第一个消息");
            map.put("data", Arrays.asList("hello world",123,true));
            rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);//发送数据
        }
        @Test
        public void receive(){
            Object o = rabbitTemplate.receiveAndConvert("atguigu.news");//接收数据
            System.err.println(o);
        }
        @Test
        public void sendBook(){
            Book book=new Book("三国演义","罗贯中");
            rabbitTemplate.convertAndSend("exchange.fanout","hello",book);
        }
        @Test
        public void receiveBook(){
            Book book = (Book) rabbitTemplate.receiveAndConvert("atguigu.news");
            System.err.println(book);
            System.err.println(book.getBookName());
            System.err.println(book.getAuthor());
        }
        @Test
        public void createExchange(){
            Exchange exchange=new FanoutExchange("java-exchange");
            amqpAdmin.declareExchange(exchange);//以declare开头的方法都是创建,以delete或remove开头的方法都是删除
        }
    
    }
    

    5.开启RabbitMQ注解模式

    @EnableRabbit//开启rabbitmq注解模式
    @SpringBootApplication
    public class SpringbootRabbitmqApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootRabbitmqApplication.class, args);
        }
    }
    

    6.在要监听的方法上使用@RabbitListener注解,监听的方法是写在业务层的

    package com.atguigu;
    
    import com.atguigu.vo.Book;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.annotation.*;
    import org.springframework.stereotype.Service;
    
    @Service//监听的方法是写在业务层的
    public class BookService {
        @RabbitListener(bindings = @QueueBinding(value = @Queue("atguigu.hello"),exchange = @Exchange("randout-exchange"),key = "atguigu"))//用来自动创建并监听RabbitMQ,value表示队列名称,exchange表示交换器,key表示路由键
        public void receive01(Book book){//这里的book就是一个实体类,表示只获取数据
            System.err.println("==================01===================");
            System.err.println(book);
        }
        @RabbitListener(queuesToDeclare = @Queue("atguigu.java"))//用来监听RabbitMQ
        public void receive02(Message message){//这里的Message是amqp包的,里面包括消息属性
            System.err.println("==================02===================");
            System.err.println(message.getBody().toString());
            //System.err.println(message.getMessageProperties());
        }
    }
    

    7.更多rabbitmq注解再百度

  • 相关阅读:
    第 33课 C++中的字符串(下)
    第 33课 C++中的字符串(上)
    第32课 初探C++标准库
    第31课 完善的复数类
    第30课 操作符重载
    第29课 类中的函数重载
    C++和C的相互调用
    函数重载遇上函数指针
    函数重载分析
    第2课 算法的效率问题
  • 原文地址:https://www.cnblogs.com/wxl123/p/12556950.html
Copyright © 2011-2022 走看看