今天来学习下怎样在Mac上安装和使用RMQ。
网上找教程安装MQ,大体氛围两种安装方式:html
若是您的系统没有安装HomeBrew,则须要先安装,查看是否安装:java
brew --version Homebrew 2.4.3-49-g4290789 Homebrew/homebrew-core (git revision 08af7; last commit 2020-07-05) Homebrew/homebrew-cask (git revision 927fe; last commit 2020-07-05)
个人系统已经安装过了,则不用再次安装Brew,直接安装RMQ便可。git
一、打开安装HomeBrew网址,和一个新的终端,拷贝安装命令到终端。github
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
二、按下回车键,命令自动执行,命令执行的过程当中会提示输入密码,此时输入登陆mac系统的帐号的密码。当命令执行结束后会出现一下提示:docker
➜ ~ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" Password: ==> You are using macOS 10.11. ==> We (and Apple) do not provide support for this old version. This installation may not succeed. After installation, you will encounter build failures with some formulae. Please create pull requests instead of asking for help on Homebrew\'s GitHub, Discourse, Twitter or IRC. You are responsible for resolving any issues you experience while you are running this old version. ==> This script will install: /usr/local/bin/brew /usr/local/share/doc/homebrew /usr/local/share/man/man1/brew.1 /usr/local/share/zsh/site-functions/_brew /usr/local/etc/bash_completion.d/brew /usr/local/Homebrew Press RETURN to continue or any other key to abort ==> Downloading and installing Homebrew...
在执行上述命令的时候,出现了这样的错误:vim
Failed to connect to raw.githubusercontent.com port 443: Connection refused
在网上查找了下缘由,是由于域名被污染了,不可用,因此须要修改hosts
文件:浏览器
sudo vim /etc/hosts
# 加上一行 199.232.28.133 raw.githubusercontent.com
brew install rabbitmq
由于 rabbitMQ 是基于 erlang 语言开发的,就如同 activemq 须要安装 java 环境同样, 为了使用 rabbitMQ 须要安装 erlang环境,因此,咱们能够看到上边的命令显示安装 erlang 语言环境。bash
若是在安装的时候出现镜像源的问题,则能够将homebrew镜像源切换为国内清华大学或阿里云镜像源,具体操做能够参考这篇文章:解决国内mac没法安装homebrew神器。服务器
若是以上不能安装,则可使用docker安装,docker安装很是简单,只需拉取镜像,由于环境已经都安装好了。dom
2.1 拉取镜像
docker pull rabbitmq
2.2 启动
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
2.3 查看docker运行
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cbb83a65ca7c rabbitmq:3-management "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq
4.访问
启动镜像以后,浏览器内输入 http://localhost:15672,默认的用户名密码都是guest,登陆后能够在Admin那一列菜单内添加本身的用户。
登陆以后的界面:
如何使用,请看该教学文档:RMQ消息队列学习
生产者:TestProducer.java
package cn.how2j; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; /** * 消息生成者 */ public class TestProducer { public final static String EXCHANGE_NAME="fanout_exchange"; public static void main(String[] args) throws IOException, TimeoutException { RabbitMQUtil.checkServer(); // 建立链接工厂 ConnectionFactory factory = new ConnectionFactory(); // 设置RMQ相关 factory.setHost("localhost"); Connection connection = factory.newConnection(); // 建立通道 Channel channel = connection.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); for(int i = 0; i < 100; i++){ String message = "direct 消息" + i; channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8")); System.out.println("发送消息: " + message); } // 关闭通道和链接 channel.close(); connection.close(); } }
消费者:TestCustomer.java
package cn.how2j; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.AMQP; 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 cn.hutool.core.util.RandomUtil; public class TestCustomer { public final static String EXCHANGE_NAME="fanout_exchange"; public static void main(String[] args) throws IOException, TimeoutException { //为当前消费者取随机名 final String name = "consumer-"+ RandomUtil.randomString(5); //判断服务器是否启动 RabbitMQUtil.checkServer(); // 建立链接工厂 ConnectionFactory factory = new ConnectionFactory(); //设置RabbitMQ地址 factory.setHost("localhost"); //建立一个新的链接 Connection connection = factory.newConnection(); //建立一个通道 Channel channel = connection.createChannel(); //交换机声明(参数为:交换机名称;交换机类型) channel.exchangeDeclare(EXCHANGE_NAME,"fanout"); //获取一个临时队列 String queueName = channel.queueDeclare().getQueue(); //队列与交换机绑定(参数为:队列名称;交换机名称;routingKey忽略) channel.queueBind(queueName,EXCHANGE_NAME,""); System.out.println(name +" 等待接受消息"); //DefaultConsumer类实现了Consumer接口,经过传入一个频道, // 告诉服务器咱们须要那个频道的消息,若是频道中有消息,就会执行回调函数handleDelivery Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(name + " 接收到消息 '" + message + "'"); } }; //自动回复队列应答 -- RabbitMQ中的消息确认机制 channel.basicConsume(queueName, true, consumer); } }
先运行两次 TestCustomer,启动两个消费者。
而后运行一次 TestProducer, 启动生产者,生产100条信息。
此时就能够看到如图所示两个消费者都能收到 这100条信息。
管理界面: