开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spring BOOT 集成 RabbitMq 实战操作(一)

简介:
+关注继续查看

RabbitMq消息消费者服务 

开发工具Idea和Spring boot来开发的。


消息消费目前只是一个简单的Demo,后续会处理成更智能一些。


首先配置文件类,RabbitMqConfig,里面配置一些用户名和密码嗨哟队列信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.basic.rabbitmq.consumer.config;
 
import com.basic.rabbitmq.consumer.listener.HandleMessageListenerAdapter;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import com.rabbitmq.client.ConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
 
/**
 * Rabbitmq配置类
 * Created by sdc on 2017/7/4.
 */
@Configuration
@ComponentScan(basePackages = {"com.basic"})
@PropertySource(value = {"classpath:application.properties"})
public class RabbitMqConfig {
 
    @Autowired
    private Environment env;
 
    /**
     * 构建connectionfactory
     * @return
     * @throws Exception
     */
    @Bean
    public ConnectionFactory connectionFactory() throws Exception {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost(env.getProperty("spring.rabbitmq.host"));
        connectionFactory.setPort(Integer.valueOf("5672".trim()));
        connectionFactory.setVirtualHost("/");
        connectionFactory.setUsername(env.getProperty("spring.rabbitmq.username"));
        connectionFactory.setPassword(env.getProperty("spring.rabbitmq.password"));
        return connectionFactory;
    }
 
    /**
     * CachingConnectionFactory
     * @return
     * @throws Exception
     */
    @Bean
    public CachingConnectionFactory cachingConnectionFactory() throws Exception {
        return new CachingConnectionFactory(connectionFactory());
    }
 
    /**
     * RabbitTemplate,类似于jdbctemplate一样的工具类
     * @return
     * @throws Exception
     */
    @Bean
    public RabbitTemplate rabbitTemplate() throws  Exception {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(cachingConnectionFactory());
        rabbitTemplate.setChannelTransacted(true);
        return rabbitTemplate;
    }
 
    @Bean
    public AmqpAdmin amqpAdmin() throws  Exception {
        return new RabbitAdmin(cachingConnectionFactory());
    }
 
    @Bean
    public SimpleMessageListenerContainer listenerContainer(
            @Qualifier("handleMessageListenerAdapter") HandleMessageListenerAdapter handleMessageListenerAdapter) throws Exception {
        //队列名字
        String queueName = env.getProperty("emial.server.queue").trim();
 
        //单一的消息监听容器
        SimpleMessageListenerContainer simpleMessageListenerContainer =
                new SimpleMessageListenerContainer(cachingConnectionFactory());
        simpleMessageListenerContainer.setQueueNames(queueName);
        simpleMessageListenerContainer.setMessageListener(handleMessageListenerAdapter);
        //手动设置 ACK,就是成功消费信息了,就设置一下这个,rabbitmq就从此队列里删除这条信息了。
        simpleMessageListenerContainer.setAcknowledgeMode(AcknowledgeMode.MANUAL);
 
        return simpleMessageListenerContainer;
    }
 
 
}


我这里配置了一个SimpleMessageListenerContainer,这个Bean,用来监听队列里的消息的。


具体的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.basic.rabbitmq.consumer.listener;
 
        import com.rabbitmq.client.Channel;
        import org.springframework.amqp.core.Message;
        import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.context.annotation.ComponentScan;
        import org.springframework.mail.MailMessage;
        import org.springframework.mail.javamail.JavaMailSender;
        import org.springframework.stereotype.Component;
 
        import javax.annotation.Resource;
 
/**
 * 监听消息的处理适配器
 * Created by sdc on 2017/7/10.
 */
@Component("handleMessageListenerAdapter")
public class HandleMessageListenerAdapter extends MessageListenerAdapter {
 
//    @Resource
//    private JavaMailSender mailSender;
 
    /**
     * 这块和activemq那个监听器差不多,都是监听信息,也都是onMessage方法。
     * @param message
     * @param channel
     * @throws Exception
     */
    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        String messageDetail = new String(message.getBody()); //消息体
        System.out.println("消息消费:" + messageDetail);
 
        // 手动ACK
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    }
}


还有一些配制文件,请看

http://10103778.blog.51cto.com/10093778/1945756

这个博客,就可以看到具体的配制了。


启动这个项目,就可以从队列消费消息了。消费者还是比较简单的,对应到相应的队列就可以处理了消息了。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1945974


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RabbitMQ——SpringBoot集成RabbitMQ
RabbitMQ——SpringBoot集成RabbitMQ
62 0
Spring Boot中使用RabbitMQ
Spring Boot中使用RabbitMQ
83 0
SpringBoot使用RabbitMQ(二)
springboot使用rabbitmq发送回调队列
4857 0
消息队列1:RabbitMQ解析并基于Springboot实战
目录 RabbitMQ简介 RabitMQ 概念模型 Exchange 类型 代码实战 RabbitMQ简介 AMQP:Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。
3670 0
springCloud Finchley 实战入门(基于springBoot 2.0.3)【五 Hystrix 服务容错保护】
服务容错保护 在微服务的架构中,存在着那么多单元服务,若一个单元出现故障,就很容易因依赖关系二引发故障的蔓延,最终导致整个系统的瘫痪。这样的架构相比较传统的架构更加不稳定。
1050 0
RabbitMQ & SpringBoot 快速入门
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。
1324 0
springboot 2.0 + elasticsearch 5.5 + rabbitmq搭建搜索服务的坑
       前一阵子准备为项目搭建一个简单的搜索服务,虽然业务数据库mongodb提供了文本搜索的支持,但是在大量文档需要通过关键词进行定位时,es明显更加适合去作为一个搜索引擎(虽然我们之前大部分使用到了ELK那套分析和可视化的特性)。
1411 0
Spring Boot 中使用 RabbitMQ
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
3954 0
Spring Boot中使用RabbitMQ
很久没有写Spring Boot的内容了,正好最近在写Spring Cloud Bus的内容,因为内容会有一些相关性,所以先补一篇关于AMQP的整合。 Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应...
1421 0
23703
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载