消息队列——spring和springboot整合rabbitmq

目录

spring整合rabbitmq——生产者

rabbitmq配置文件信息

倒入生产者工程的相关代码

简单工作模式

spring整合rabbitmq——消费者

spring整合rabbitmq——配置详解

SpringBoot整合RabbitMQ——生产者

 SpringBoot整合RabbitMQ——消费者


 

spring整合rabbitmq——生产者

消息队列——spring和springboot整合rabbitmq_第1张图片

使用原生amqp来写应该已经没有这样的公司了

创建两个工程,一个生产者一个消费者,分别倒入如下依赖

    
        
        
            org.springframework
            spring-context
            5.1.7.RELEASE
        
        
        
            org.springframework.amqp
            spring-rabbit
            2.1.8.RELEASE
        
        
        
            junit
            junit
            4.12
        

        
            org.springframework
            spring-test
            5.1.7.RELEASE
        
    

    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.0
                
                    1.8
                    1.8
                
            
        
    

rabbitmq配置文件信息

rabbitmq.properties文件如下

rabbitmq.host=172.16.98.133
rabbitmq.port=5672
rabbitmq.username=heima
rabbitmq.password=heima
rabbitmq.virtual-host=/itcast

倒入生产者工程的相关代码



    
    

    
    
    
    

    
    

    
    
    

    
    

    
    
        
            
            
        
    

    
    
    
    
    
    
    

    
        
            
            
            
        
    

    
    

 上面这个配置文件准备了三种工作模式需要的队列和交换机。

简单工作模式

在测试类中加载配置文件并发送消息


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-producer.xml")
public class ProducerTest {
    //1.注入RabbitTemplate
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testHelloWorld(){
        //2.发送消息
        rabbitTemplate.convertAndSend("spring_queue","hello-yhy");
    }

    /**
     * 发送fanout
     */
    @Test
    public void testFaonut(){
        //2.发送消息
        rabbitTemplate.convertAndSend("spring_fanout_exchange","","spring fanout....");
    }

    /**
     * 发送topic消息
     */
    @Test
    public void testTopic(){
        //2.发送消息
        rabbitTemplate.convertAndSend("spring_topic_exchange","heima.hehe.haha","spring topic....");
    }


}

运行上三个测试方法过后管理端如下,出现了新的队列和交换机和信息

消息队列——spring和springboot整合rabbitmq_第2张图片

   

spring整合rabbitmq——消费者

导入消费者的XML配置文件

消费者中还要创建对应的监听器的类,不然配置文件爆红



    
    

    
    

    






    
        





    

然后创建一个简单工作模式需要的对应类

public class SpringQueueListener implements MessageListener {
    @Override
    public void onMessage(Message message) {
        /**
         * 打印消息
         */
        System.out.println(new String(message.getBody()));
    }
}

在测试类中弄个方法用来加载配置文件,配置文件一加载,上面的监听器就会自动执行的。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-consumer.xml")
public class ConsumerTest {
    @Test
    public void test1(){
        while(true){
            
        }
    }
}

其余的都是一模一样的写法。

spring整合rabbitmq——配置详解

队列声明的参数 

消息队列——spring和springboot整合rabbitmq_第3张图片

广播类型的交换机和队列绑定时不需要指定路由key,direct和topic都要指定路由key.

SpringBoot整合RabbitMQ——生产者

消息队列——spring和springboot整合rabbitmq_第4张图片

引入如下依赖

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

 再在resources目录下写一个配置文件类

# 配置RabbitMQ的基本信息 ip 端口 username password ...
spring:
  rabbitmq:
    host: 
    post: 5672
    username: guest
    password: guest
    virtual-host: /

创建启动类

package com.yhy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class);
    }
}

准备一个配置类

package com.yhy.rabbit.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class RabbitConfig {
    public static final String EXCHANGE_NAME="boot_topic_exchange";
    public static final String QUEUE_NAME="boot_queue";

    //1.交换机
    @Bean("bootExchange")
    public Exchange bootExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
    //2.Queue队列
    @Bean("bootQueue")
    public Queue bootQueue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
    //3.队列和交换机绑定关系,Binding
    /**
     * 1.知道哪个队列
     * 2.知道哪个交换机
     * 3.routing key
     */
    @Bean
    public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue,@Qualifier("bootExchange") Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
    }
}

在测试类中准备如下测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class ProducerTest {
    //1.注入RabbitTemplate
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testSend(){
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME,"boot.haha","boot mq hello");
    }
}

运行后可以看见出现有新队列和消息

 SpringBoot整合RabbitMQ——消费者

消息队列——spring和springboot整合rabbitmq_第5张图片

 在性工程创建一个监听类如下,加上@Component注解之后就可以自动执行一次了

@Component
public class RabbitMQListener {
    @RabbitListener(queues="boot_queue")
    public void ListenerQueue(Message message){
        System.out.println(message);
    }
}

输出如下,成功获取到上面生产者发出的消息

   

 消息队列——spring和springboot整合rabbitmq_第6张图片

你可能感兴趣的:(消息队列,spring,java-rabbitmq,spring,boot)