SpringBoot整合RabbitMQ

SpringBoot整合RabbitMQ

Erlang语言配置、RabbitMQ安装、RabbitMQ plugin安装就不介绍了

1. maven依赖


    <dependencies>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
		
        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

        <!--aop-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
		<!--mvc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2. RabbitMQ配置

package com.spring.rabbitmq.config;

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/4 20:40
 *
 * 连接rabbitMQ的基本配置
 */

@Configuration
public class RabbitmqConfig {

    @Bean
    public ConnectionFactory connectionFactory() {
        //地址
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory("127.0.0.1");
        //端口
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("用户名");
        connectionFactory.setPassword("密码");
        connectionFactory.setVirtualHost("虚拟主机名");
        return connectionFactory;
    }

    @Bean
    public AmqpAdmin amqpAdmin(){
        return new RabbitAdmin(connectionFactory()) ;
    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        return new RabbitTemplate(connectionFactory()) ;
    }

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory());
        factory.setConcurrentConsumers(3);
        factory.setMaxConcurrentConsumers(10);
        return factory;
    }
}

3. Exchange配置

package com.spring.rabbitmq.config;

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.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 15:45
 *
 * DirectExchangeConfig 一个交换机 两个队列 两个binding
 */

@Configuration
public class DirectExchangeConfig {

    //创建一个direct的exchange
    @Bean(value = "messageExchange1")
    public DirectExchange directExchange(){
        DirectExchange directExchange = new DirectExchange("message.exchange1");
        return directExchange ;
    }

    //direct的exchange和队列message1绑定
    @Bean(value = "messageExchange1ToMessage1")
    public Binding messageExchange1ToMessage1(@Qualifier("message1")Queue message1){
        return BindingBuilder.bind(message1).to(directExchange()).with("message1") ;
    }


    //direct的exchange和队列message3绑定
    @Bean(value = "messageExchange1ToMessage3")
    public Binding messageExchange1ToMessage3(@Qualifier("message3")Queue message3){
        return BindingBuilder.bind(message3).to(directExchange()).with("message3") ;
    }

}

package com.spring.rabbitmq.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 19:49
 */

@Configuration
public class FanoutExchangeConfig {

    //创建一个fanout的exchange
    @Bean(value = "messageExchange2")
    public FanoutExchange fanoutExchange(){
        FanoutExchange fanoutExchange = new FanoutExchange("message.exchange2") ;
        return fanoutExchange ;
    }

	//fanout的exchange和message2绑定
    @Bean(value = "messageExchange2ToMessage2")
    public Binding messageExchange2ToMessage2(@Qualifier("message2")Queue message2){
        return BindingBuilder.bind(message2).to(fanoutExchange()) ;
    }
	
    //fanout的exchange和message4绑定
    @Bean(value = "messageExchange2ToMessage4")
    public Binding messageExchange2ToMessage4(@Qualifier("message4")Queue message4){
        return BindingBuilder.bind(message4).to(fanoutExchange()) ;
    }
}

4. Queue配置

package com.spring.rabbitmq.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 16:08
 * 设置四个队列接受消息
 */

@Configuration
public class RabbitmqQueueConfig {

    @Bean(value = "message1")
    public Queue message1(){
        return new Queue("message1") ;
    }

    @Bean(value = "message2")
    public Queue message2(){
        return new Queue("message2") ;
    }

    @Bean(value = "message3")
    public Queue message3(){
        return new Queue("message3") ;
    }

    @Bean(value = "message4")
    public Queue message4(){
        return new Queue("message4") ;
    }
}

5. Listener配置

package com.spring.rabbitmq.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 20:59
 */

@Component
public class Message1Listener {

    @RabbitListener(queues = "message1")
    public void listener(String data){
        System.out.println("收到【message1】消息:"+data);
    }
}
package com.spring.rabbitmq.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 21:00
 */

@Component
public class Message2Listener {

    @RabbitListener(queues = "message2")
    public void listener(String data){
        System.out.println("收到【message2】消息:"+data);
    }
}

package com.spring.rabbitmq.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 21:00
 */

@Component
public class Message3Listener {

    @RabbitListener(queues = "message3")
    public void listener(String data){
        System.out.println("收到【message3】消息:"+data);
    }
}
package com.spring.rabbitmq.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 21:00
 */

@Component
public class Message4Listener {

    @RabbitListener(queues = "message4")
    public void listener(String data){
        System.out.println("收到【message4】消息:"+data);
    }
}

6. Service配置

package com.spring.rabbitmq.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 21:46
 */

@Service("sendDirectService")
public class SendDirectService {

    @Autowired
    private RabbitTemplate rabbitTemplate ;

    public void sendDataToMessage1(String data){
        rabbitTemplate.convertAndSend("message.exchange1" , "message1" , data);
    }

    public void sendDataToMessage3(String data){
        rabbitTemplate.convertAndSend("message.exchange1" , "message3" , data);
    }
    
}

package com.spring.rabbitmq.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author gyh
 * @csdn https://blog.csdn.net/qq_40788718
 * @date 2020/5/9 22:15
 */

@Service("sendFanoutService")
public class SendFanoutService {

    @Autowired
    private RabbitTemplate rabbitTemplate ;

    public void sendFanoutService(String data){
        rabbitTemplate.convertAndSend("message.exchange2" , "" , data);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值