windows安装使用RabbitMQ
选择版本erlang和rabbitmq对应版本
http://www.rabbitmq.com/which-erlang.html
RabbitMQ简介
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:
- RabbitMQ安装
1、首先安装erlang
下载地址:http://www.erlang.org/downloads/20.3
安装完成后配置环境变量
安装完成检查
2、RabbitMAQ安装
下载地址:http://www.rabbitmq.com/install-windows.html
安装完成后设置登录账户完成后重启服务 这个没有成功 应该是必须设置服务器登录账号密码吧
安装界面
rabbitmq-plugins enable rabbitmq_management
3、RabbitMQ常用命令
开启浏览器访问http://localhost:15672
默认userName:guest password:guest
创建用户
rabbitmqctl.bat add_user leimiaotang 123456
授权角色 这一段没弄懂我是另外一种设置用户权限
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(2)设置用户权限 和 修改用户密码
(5) 其他的
进入到sbin目录下执行命令
rabbitmq-server stop
rabbitmq-server start
pom.xml
4.0.0
com.yt
rabbitmq-demo
0.0.1-SNAPSHOT
jar
rabbitmq-demo
http://maven.apache.org
路由类型
package com.rabbitmq.commons;
public enum ExchangeType {
FANOUT("fanout", "fanout"),
DIRECT("direct", "direct"),
TOPIC("topic", "topic"),
HEADERS("headers", "headers");
private ExchangeType(String name, String type){
this.name = name;
this.type = type;
}
private String name;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
生产者
package com.rabbitmq.direct;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import com.rabbitmq.commons.ExchangeType;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Producer {
private static final String QUEUE_NAME = "BOYS";
private static final String QUEUE_NAME_2 = "GRILS";
private static ConnectionFactory factory;
private static Connection connection;
private static Channel channel;
static{
try {
factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("admin");
factory.setPassword("123456");
connection = factory.newConnection();
channel = connection.createChannel();
channel.exchangeDeclare(ExchangeType.DIRECT.getName(), ExchangeType.DIRECT.getType());
/*1.队列名称,2.是否可持久化,3.是否排他列队,4.是否自动删除(空闲时)*/
channel.queueDeclare(QUEUE_NAME, false, false, true, null);
// 把队列绑定到交换器
channel.queueBind(QUEUE_NAME, ExchangeType.DIRECT.getName(), "boys");
channel.queueDeclare(QUEUE_NAME_2, false, false, true, null);
channel.queueBind(QUEUE_NAME_2, ExchangeType.DIRECT.getName(), "girls");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
public static void send(String msg) throws IOException, TimeoutException{
try {
/*1.交换机名称;2.路由关键字即routing key;3.配置信息,contentType、contentEncoding等;4.消息,字节数组格式*/
channel.basicPublish(ExchangeType.DIRECT.getName(), "girls", MessageProperties.MINIMAL_BASIC, msg.getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally{
channel.close();
connection.close();
}
}
public static void main(String[] args) {
try {
send("hello girls1");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
消费者
package com.rabbitmq.direct;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.*;
import com.rabbitmq.commons.ExchangeType;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Consumer {
private static final String QUEUE_NAME = “BOYS”;
private static final String QUEUE_NAME_2 = “GRILS”;
private static ConnectionFactory factory;
private static Connection connection;
private static Channel channel;
static{
try {
factory = new ConnectionFactory();
factory.setHost(“localhost”);
factory.setPort(5672);
factory.setVirtualHost(“/”);
factory.setUsername(“admin”);
factory.setPassword(“123456”);
connection = factory.newConnection();
channel = connection.createChannel();
channel.exchangeDeclare(ExchangeType.DIRECT.getName(), ExchangeType.DIRECT.getType());
/1.队列名称,2.是否可持久化,3.是否排他列队,4.是否自动删除(没有消费者订阅时)/
channel.queueDeclare(QUEUE_NAME, false, false, true, null);
channel.queueBind(QUEUE_NAME, ExchangeType.DIRECT.getName(), “boys”);
channel.queueDeclare(QUEUE_NAME_2, false, false, true, null);
channel.queueBind(QUEUE_NAME_2, ExchangeType.DIRECT.getName(), “girls”);
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
public static void receive() throws ShutdownSignalException, ConsumerCancelledException, InterruptedException, IOException{
com.rabbitmq.client.Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body);
System.out.println("cousumer received message:" + msg);
}
};
com.rabbitmq.client.Consumer consumer2 = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body);
System.out.println("cousumer2 received message:" + msg);
}
};
/*1.队列名称;2.是否自动发送ack;3.消费者*/
channel.basicConsume(QUEUE_NAME, true, consumer);
channel.basicConsume(QUEUE_NAME_2, true, consumer2);
}
public static void main(String[] args) throws IOException, TimeoutException {
try {
receive();
} catch (Exception e) {
e.printStackTrace();
}
}
}