rabbitMQ安装及整合springBoot

rabbitMQ安装及整合springBoot

安装

这里只接贴一个安装流程博文windows10环境下的RabbitMQ安装步骤
安装所需的两个文件:
[百度云链接] https://pan.baidu.com/s/1DCXisERe5T4yUbIGdGR-jA
提取码 dsnm

在springBoot使用

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

第一步:导入依赖

@Configuration
public class RabbitConfig {
    @Bean
    public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate();
        rabbitTemplate.setConnectionFactory(connectionFactory);
        //设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
        rabbitTemplate.setMandatory(true);

        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
            @Override
            public void confirm(CorrelationData correlationData, boolean ack, String cause) {
                System.out.println("ConfirmCallback:     "+"相关数据:"+correlationData);
                System.out.println("ConfirmCallback:     "+"确认情况:"+ack);
                System.out.println("ConfirmCallback:     "+"原因:"+cause);
            }
        });

        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
            @Override
            public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
                System.out.println("ReturnCallback:     "+"消息:"+message);
                System.out.println("ReturnCallback:     "+"回应码:"+replyCode);
                System.out.println("ReturnCallback:     "+"回应信息:"+replyText);
                System.out.println("ReturnCallback:     "+"交换机:"+exchange);
                System.out.println("ReturnCallback:     "+"路由键:"+routingKey);
            }
        });

        return rabbitTemplate;
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(new Jackson2JsonMessageConverter());
        return template;
    }

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(new Jackson2JsonMessageConverter());
        return factory;
    }

}

第二步:配置bean,注意,这里的三个不是必须的,如果之后消费者出现了
No method found for class java.lang.String
的错误,就加上这个,然后再消费者的注解里面加一个参数,指向rabbitListenerContainerFactory即可

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

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

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

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



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

第三步:创建Exchange 和 Queue 并 用 routingKey 进行关联起来
要是觉得光用这个不够,看看这个
我就是按这个来走的,里面还有几个别的类型的交换机,我这边没有涉及到

    //使用RabbitTemplate,这提供了接收/发送等等方法
    @Autowired
    RabbitTemplate rabbitTemplate;
    //在controller的方法里面使用即可
    rabbitTemplate.convertAndSend("PushFaceExchange", "PushFaceKey", pushMap);
第四步:导入RabbitTemplate 并使用,pushMap 是个Object,可以放任何类型
@Component
public class PushFaceController {

    @RabbitHandler
    @RabbitListener(queues = "PushFaceQueue", containerFactory="rabbitListenerContainerFactory")//监听的队列名称 TestDirectQueue
    public void process(Map<String,Object> msgMap) throws Exception {
    //todo
    }catch (Exception e){
           e.printStackTrace();
       }
    }

在这里进行消费,我将RabbitListener放到方法级,并加了一个containerFactory=“rabbitListenerContainerFactory” 就是因为上面出的那个问题,如果没有问题的话,可以在@Component下面加上,最好处理业务的时候加一个try catch进行处理异常,否则会造成队列无限积累,无法消费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值