关于RabbitMQ服务器整合(二)
准备工作
- 15min
- IDEA
- maven 3.0
在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如果你是用的Mac(程序员都应该用mac吧),你可以这样下载:
| 1 | brew install rabbitmq | 
安装完成后开启服务器:
| 1 | rabbitmq-server | 
开启服务器成功,你可以看到以下信息:
| 1 2 3 4 5 6 7 |            RabbitMQ 3.1.3. Copyright (C) 2007-2013VMware, Inc.##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/##  ############  Logs: /usr/local/var/log/rabbitmq/rabbit@localhost.log######  ##        /usr/local/var/log/rabbitmq/rabbit@localhost-sasl.log##########            Starting broker... completed with 6plugins. | 
构建工程
构架一个SpringBoot工程,其pom文件依赖加上spring-boot-starter-amqp的起步依赖:
| 1 2 3 4 | <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-amqp</artifactId>        </dependency> | 
创建消息接收者
在任何的消息队列程序中,你需要创建一个消息接收者,用于响应发送的消息。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @ComponentpublicclassReceiver {    privateCountDownLatch latch = newCountDownLatch(1);    publicvoidreceiveMessage(String message) {        System.out.println("Received <"+ message + ">");        latch.countDown();    }    publicCountDownLatch getLatch() {        returnlatch;    }} | 
消息接收者是一个简单的POJO类,它定义了一个方法去接收消息,当你注册它去接收消息,你可以给它取任何的名字。其中,它有CountDownLatch这样的一个类,它是用于告诉发送者消息已经收到了,你不需要在应用程序中具体实现它,只需要latch.countDown()就行了。
创建消息监听,并发送一条消息
在spring程序中,RabbitTemplate提供了发送消息和接收消息的所有方法。你只需简单的配置下就行了:
- 需要一个消息监听容器
- 声明一个quene,一个exchange,并且绑定它们
- 一个组件去发送消息
代码清单如下:
| 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 | packagecom.forezp;importcom.forezp.message.Receiver;importorg.springframework.amqp.core.Binding;importorg.springframework.amqp.core.BindingBuilder;importorg.springframework.amqp.core.Queue;importorg.springframework.amqp.core.TopicExchange;importorg.springframework.amqp.rabbit.connection.ConnectionFactory;importorg.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;importorg.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.context.annotation.Bean;@SpringBootApplicationpublicclassSpringbootRabbitmqApplication {     finalstaticString queueName = "spring-boot";    @Bean    Queue queue() {        returnnewQueue(queueName, false);    }    @Bean    TopicExchange exchange() {        returnnewTopicExchange("spring-boot-exchange");    }    @Bean    Binding binding(Queue queue, TopicExchange exchange) {        returnBindingBuilder.bind(queue).to(exchange).with(queueName);    }    @Bean    SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,                                             MessageListenerAdapter listenerAdapter) {        SimpleMessageListenerContainer container = newSimpleMessageListenerContainer();        container.setConnectionFactory(connectionFactory);        container.setQueueNames(queueName);        container.setMessageListener(listenerAdapter);        returncontainer;    }    @Bean    MessageListenerAdapter listenerAdapter(Receiver receiver) {        returnnewMessageListenerAdapter(receiver, "receiveMessage");    }    publicstaticvoidmain(String[] args) {        SpringApplication.run(SpringbootRabbitmqApplication.class, args);    }} | 
创建一个测试方法:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @ComponentpublicclassRunner implementsCommandLineRunner {    privatefinalRabbitTemplate rabbitTemplate;    privatefinalReceiver receiver;    privatefinalConfigurableApplicationContext context;    publicRunner(Receiver receiver, RabbitTemplate rabbitTemplate,            ConfigurableApplicationContext context) {        this.receiver = receiver;        this.rabbitTemplate = rabbitTemplate;        this.context = context;    }    @Override    publicvoidrun(String... args) throwsException {        System.out.println("Sending message...");        rabbitTemplate.convertAndSend(Application.queueName, "Hello from RabbitMQ!");        receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);        context.close();    }} | 
启动程序,你会发现控制台打印:
| 1 2 | Sending message...Received <Hello from RabbitMQ!> | 

关于RabbitMQ服务器整合(二)的更多相关文章
- Spring Boot教程(二)关于RabbitMQ服务器整合
		准备工作 15min IDEA maven 3.0 在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如 ... 
- Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块  httplib模块  django和web服务器整合  wsgi模块   gunicorn模块
		Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 ... 
- RabbitMQ学习系列二-C#代码发送消息
		RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ... 
- RabbitMQ官方教程二 Work Queues(GOLANG语言实现)
		RabbitMQ官方教程二 Work Queues(GOLANG语言实现) 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息. 在这一部分中,我们将创建一个工作队列,该队列将用于在多个wo ... 
- FastDFS搭建单机图片服务器(二)
		防丢失转载:https://blog.csdn.net/MissEel/article/details/80856194 根据 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 和 ... 
- RabbitMQ小记(二)
		1.RabbitMQ相关介绍 (1)RabbitMQ整体上是一个生产者和消费者模型,主要负责接收.存储.转发消息.RabbitMQ整体结构图如下: (2)生产者:发送消息的一方,生产者创建一条消息,发 ... 
- JAVA+PHP+阿里云组件纯手工实现POP、SMTP、IMAP开发邮件服务器(二)
		java开发邮件服务器的接收模块 用java建立socket服务端,监听端口25,实现SMTP协议.即可完成邮件服务器的接收模块. 这里要注意的是,SMTP协议其实可以分为两种.一种是你用手机.PC等 ... 
- Windows 下安装RabbitMQ服务器及基本配置
		RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ... 
- 2. RabbitMQ 服务器 之下载安装
		RabbitMQ服务器如何安装? RabbitMQ是一个AMQP(Advanced Message Queue,即高级消息队列协议)服务器 . 下载地址: RabbitMQ下载 安装说明:各平台下Ra ... 
随机推荐
- Vue--vux组件库
			各种组件demo源码~ https://doc.vux.li/zh-CN/ 
- 初步接触ES6
			Babel---ES6转码器 ES6 声明变量的六种方法 ES5 只有两种声明变量的方法:var命令和function命令. ES6除了添加let和const命令,另外两种声明变量的方法:import ... 
- [osg][原]自定义osgGA漫游器
			相机矩阵变化基础:http://blog.csdn.net/popy007/article/details/5120158 osg漫游器原理:http://blog.csdn.net/csxiaosh ... 
- IPC 之 Messenger 的使用
			一.概述 Messenger 是一种轻量级的 IPC 方案,它的底层实现是 AIDL ,对 AIDL 进行了封装,方便了对它的使用.Messenger 一次只处理一个请求,所以在服务端不用考虑线程同步 ... 
- bat 命令   常用配置及其用法
			1.初衷: bat 批处理文件:当我懒得一个个操作的时候,可以把若干东西放到一个文件里面,开机运行或者需要的时候手动运行.节省时间. 2.命令集说明 2.1 常用命令 2.1.0 help 命令 /? ... 
- Qt解析Json数据
			1 JSON数据简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范) ... 
- QTableWidget自定义表头QHeaderView加全选复选框
			1 QTableWidget自定义表头QHeaderView加全选复选框 在使用QTableWidget时需要在表头添加全选复选框,但是默认的表头无法添加复选框,只能用图片画上去一个复 ... 
- php后台操作以及一些减缓服务器压力的问题
			上次提到一个微信投票系统,做了一个微信重定向解决了,一个授权复用的问题,昨天投票系统正式投入使用:测试的时候没有问题,上线后出现了一点小问题, 一:php页面参数接受和php中 switch 那个先执 ... 
- lua --- __newindex
			-- __newindex 对表进行更新 MyMetatable = {} MyTable = }, {__newindex = MyMetatable}) MyTable.newKey1 = pri ... 
- three.js 制作一个简单的圆柱体模型
			<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - or ... 
