windows安装使用RabbitMQ

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]修改而来,用它写博客,将会带来全新的体验哦:

  1. 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

junit junit 3.8.1 test com.rabbitmq amqp-client 4.0.1 com.rabbitmq amqp-client 4.0.1 org.slf4j slf4j-api org.slf4j slf4j-log4j12 1.7.7

路由类型

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();
	}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值