消息中间件之RabbitMQ入门讲解(二十)

RabbitMQ在Windows上的使用

1.下载安装Erlang

RabbitMQ是基于AMQP协议进行通讯的,其中Erlang语言完成了对AMQP的封装,所以我们需要下载安装Erlang,下载完成之后会得到一个类似otp_win64_20.0.exe的文件,本次演示使用的版本是20.0的,演示版本的安装包也可以从底部的源码里面获取。

2.下载安装RabbitMQ

RabbitMQ官网下载RabbitMQ的安装文件,会得到一个类似rabbitmq-server-3.7.5.exe的文件(同上,底部的源码会给出安装文件)。安装过程没有太多需要解释的,直接下一步。安装完成之后,RabbitMQ会作为一个Windows的服务启动。

如果没有启动,记得先将它启动起来。

3.启用RabbitMQ界面

首先打开一个命令行窗口,然后进入RabbitMQ安装路径下的sbin文件夹,譬如我的是:

D:\software\RabbitMQ\rabbitmq_server-3.7.5\sbin

可以运行这个命令查看插件列表:rabbitmq-plugins list

观察红色框框出的这个插件,是否是开启状态,也就是前面是否有“E*”的标志,开启了管理插件,我们才可以使用RabbitMQ提供的后台管理界面。

如果没有开启,使用命令开启管理插件:rabbitmq-plugins enable rabbitmq_management

接着,在浏览器访问:http://localhost:15672,就会进入RabbitMQ的后台管理界面:

默认的用户名和密码都是guest,点击登录:

在这里我们就可以看到概览、连接、通道、交换器、队列等等的相关信息。

4.编写消息生产者和消息消费者

内容来源是RabbitMQ的开发文档:http://www.rabbitmq.com/getstarted.html

首先创建一个简单java的maven项目hello-rabbitmq,来当做RabbitMQ客户端的消息生产者,在pom.xml中加入依赖:

<dependencies>
	<dependency>
		<groupId>com.rabbitmq</groupId>
		<artifactId>amqp-client</artifactId>
		<version>4.6.0</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.7.25</version>
	</dependency>
</dependencies>

创建com.init.springCloud包,之后在包下创建SendMessage.class类,按照开发文档编写消息生产者并发布一个信息,我的注释也写得比较完整,就不过多解释了:

package com.init.springCloud;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class SendMessage {

	//声明一个队列的名称
	private final static String QUEUE_NAME = "hello";
	
	public static void main(String[] args) throws Exception{
		ConnectionFactory factory = new ConnectionFactory();
		//1.设置主机,其实默认用的就是本机,端口5672,不用设置
		factory.setHost("localhost");
		//2.创建连接
		Connection connection = factory.newConnection();
		//3.创建通道
		Channel channel = connection.createChannel();
		//4.将消息放到队列里
		//2、3、4、5参数的意思:是否是持久的;是否是独立的;是否自动删除;队列参数
		//这里都用默认的就可以了
		channel.queueDeclare(QUEUE_NAME, false, false, false, null);
		String message = "Hello World!";
		//5.发布消息到RabbitMQ服务器
		channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
		System.out.println(" [x] Sent '" + message + "'");
		//6.发送完毕之后,关闭连接
		if(channel != null){
			channel.close();
		}
		if(connection != null){
			connection.close();
		}
	}

}

运行main()方法,控制台打印了推送信息,我们去RabbitMQ的管理界面也可以看到新增了一个消息队列,有一条消息存在于队列中:

接下来编写消息消费者,创建ReceiveMessage.class类,用于接收消息:

package com.init.springCloud;

import java.io.IOException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;

public class ReceiveMessage {
	
	private final static String QUEUE_NAME = "hello";
	
	public static void main(String[] args) throws Exception{
	    ConnectionFactory factory = new ConnectionFactory();
	    factory.setHost("localhost");
	    Connection connection = factory.newConnection();
	    Channel channel = connection.createChannel();

	    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
	    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
		
	    Consumer consumer = new DefaultConsumer(channel) {
	    	@Override
	    	public void handleDelivery(String consumerTag, Envelope envelope,
	    			BasicProperties properties, byte[] body) throws IOException {
	    		String message = new String(body, "UTF-8");
	    	    System.out.println(" [x] Received '" + message + "'");
	    	}
	    };
    	channel.basicConsume(QUEUE_NAME, true, consumer);
	}
	
}

前面的步骤都大致类似,这里说一下接收消息的DefaultConsumer(),里面实现了一个handleDelivery的方法:由于我们可能会在生产者之前启动消费者,所以在尝试使用它之前,我们希望确保队列的存在。Consumer会异步地推送我们的消息,所以我们提供了一个回调,它的形式是一个对象,它将缓冲这些消息,直到我们准备好使用它们为止。

运行ReceiveMessage的mian()方法,可以看到控制台输出了我们之前发布的消息:

源码点击这里

最后,大家有什么不懂的或者其他需要交流的内容,也可以进入我的QQ讨论群一起讨论:654331206

Spring Cloud系列:

Spring Cloud介绍与环境搭建(一)

Spring Boot的简单使用(二)

Spring Cloud服务管理框架Eureka简单示例(三)

Spring Cloud服务管理框架Eureka项目集群(四)

Spring Cloud之Eureka客户端健康检测(五)

Netflix之第一个Ribbon程序(六)

Ribbon负载均衡器详细介绍(七)

Spring Cloud中使用Ribbon(八)

具有负载均衡功能的RestTemplate底层原理(九)

OpenFeign之第一个Feign程序(十)

OpenFeign之feign使用简介(十一)

Spring Cloud中使用Feign(十二)

Netflix之第一个Hystrix程序(十三)

Netflix之Hystrix详细分析(十四)

Spring Cloud中使用Hystrix(十五)

Netflix之第一个Zuul程序(十六)

Spring Cloud集群中使用Zuul(十七)

Netflix之Zuul的进阶应用(十八)

消息驱动之背景概述(十九)

消息中间件之RabbitMQ入门讲解(二十)

消息中间件之Kafka入门讲解(二十一)

Spring Cloud整合RabbitMQ或Kafka消息驱动(二十二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值