1.安装Erlang和RabbitMq

在安装RabbitMq之前需要安装的Erlang(esl-erlang_22.0_windows_amd64.exe): https://pan.baidu.com/s/1_ExgTzvCRN0byIYXgiA16g

需要安装的RabbitMq(rabbitmq-server-3.7.18.exe):https://pan.baidu.com/s/10UuuukYibnpmm16RtUZw3Q

安装时这两个软件没有特殊设置,一路同意接受就行了。

2.开启RabbitMq的管理

安装完成后,找到RaabitMq的sbin所在的目录,在我的Win10系统上,这个路径是C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin,然后打开控制台,进入这个目录.

然后输入>rabbitmq-plugins enable rabbitmq_management

C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@DESKTOP-8IDBHPK:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@DESKTOP-8IDBHPK...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>

这一步的目的是为了能使用RabbitMq的控制界面。

3.查看RabbitMq的控制界面。

打开浏览器,在地址栏输入 http://localhost:15672,在弹出的登录页中都输入guest,登录进去,你将看到下面画面。

看到这个页面后,意味着RabbitMq的安装配置都完成了,下面就可以写代码了。

4.书写代码往队列里发消息

接下来打开SpringToolSuite或者其它Eclipse,新建一个Maven工程,在pom.xml里添加以下红色粗体部分的dependency。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>test</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>4.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.9</version>
    </dependency>

  </dependencies>
</project>

题外话:不用Maven工程,直接用java工程也可,只是你需要自己去找对应的jar包,稍显麻烦。但网络不好用的时候还必须这么做。

创建完工程后就可以写 消息发送者 代码了。

package com.test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

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

/**
 * Hello world!
 *
 */
public class Sender
{
    public static void main( String[] args ) throws IOException, TimeoutException
    {
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("localhost");
        Connection conn=factory.newConnection();

        Channel channel=conn.createChannel();

        String queueName="MsgQue";
        channel.queueDeclare(queueName, false, false, false, null);

        String message="hello!RabbitMq";

        channel.basicPublish("", queueName, null, message.getBytes());        

        channel.close();
        conn.close();
    }
}

执行后不报错就说明消息发到队列里面去了。

5.书写代码从队列里取消息

在同一个工程里另外起一个类,书写下面的代码:

package com.test;

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;

public class Comsumer {
    public static void main( String[] args ) throws IOException, TimeoutException
    {
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("localhost");
        Connection conn=factory.newConnection();

        Channel channel=conn.createChannel();

        String queueName="MsgQue";
        channel.queueDeclare(queueName, false, false, false, null);

        Consumer consumer=new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body) throws IOException {
                String msg=new String(body,"UTF-8");
                System.out.println("收到消息:"+msg);
            }
        };

        channel.basicConsume(queueName, true, consumer);
    }
}

这个类启动后就处于阻塞状态,阻塞就像一条船堵在运河(channel)上,这时从运河上飘来的东西(消息)都会被船(消息消费者)截获住。

下面是控制台的输出,其中第一条消息是消费者启动前发上去的,第二条是消费者处于阻塞时再发的,两条消息都被消费者收取(截获)了。

收到消息:你好!RabbitMq
收到消息:hello!RabbitMq

下图显示了消费者的状态:

好了,到此任务完成,恭喜你又做了一个Hello World程序。

参考书:

1.《疯狂Spring Cloud微服务架构实战》杨恩雄 编著

--END-- 2019年9月28日10:36:05

安装RabbitMq,写程序发送接收消息的更多相关文章

  1. 【Spring】使用Spring和AMQP发送接收消息(上)

    讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽 ...

  2. 微信小程序发送模板消息

    微信小程序发送模板消息 标签(空格分隔): php 看小程序文档 [模板消息文档总览]:https://developers.weixin.qq.com/miniprogram/dev/framewo ...

  3. GCM 发送接收消息 Message Client Server 服务器端,客户端

    GCM 传递参数 最近用了很多时间做GCM,由于碰到很多问题,因此详细做一下记录,以方便各位网友,不用再走我的重复的路.不过我试了一下GCM在国内很不好用.假如开发国外的程序的话,用GCM倒是很不错的 ...

  4. 【Spring】使用Spring和AMQP发送接收消息(中)

    上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bea ...

  5. 【Spring】使用Spring和AMQP发送接收消息(下)

    上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息.在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式.Spring AMQP也提供 ...

  6. ActiveMQ安装与入门程序 & JMS的消息结构

    1.Activemq安装 直接到官网下载:记住apache的官网是域名反过来,比如我们找activemq就是activemq.apache.org. 最新版本要求最低的JDK是8,所以最好在电脑装多个 ...

  7. 微信小程序 发送模板消息的功能实现

    背景 - 小程序开发的过程中,绝大多数会满足微信支付 - 那么,作为友好交互的体现,自然就会考虑到支付后的消息通知咯 - 所以,我的小程序项目也要求完成这个效果,so.分享一下自己的实现步骤,以方便道 ...

  8. RabbitMQ如何保证发送端消息的可靠投递-发生镜像队列发生故障转移时

    上一篇最后提到了mandatory这个参数,对于设置mandatory参数个人感觉还是很重要的,尤其在RabbitMQ镜像队列发生故障转移时. 模拟个测试环境如下: 首先在集群队列中增加两个镜像队列的 ...

  9. 微信小程序发送订阅消息(之前是模板消息)

    之前的模板消息已经废弃,现在改为订阅消息,订阅消息发布前,需要用户确认后才能接收订阅消息. 小程序端 index.wxml <button bindtap="send"> ...

随机推荐

  1. jQuery EasyUI中DataGird动态生成列的方法

    EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...

  2. Photoshop从入门到精通所有视频教程(43G)以及素材资料免费拿

    包含了Photoshop从入门到精通所有需要了解的视频教程资料,并且包含了大量的P图素材. 资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请 ...

  3. 第九章、import 和from ...import

    目录 第九章.import 和from ...import 一.import和 from ...import ... 二.import模块名 第九章.import 和from ...import 一. ...

  4. promises的深入学习

    Promise 的含义 § ⇧ Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供 ...

  5. makefile学习之函数

    GNU make支持内置函数以及用户自定义函数,下面结合例子简单介绍一下. gnu make版本: 4.1 一.用户自定义函数 格式: $(call macro-name{, param1 ···}) ...

  6. Linux中/etc/inittab文件

    1. inittab基本概念 a) init进程: Linux在完成核内引导(内核镜像已被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,接着通过启动一个用户级程序init来启动其 ...

  7. 很有用的shell脚本

    基础知识 expect基础知识 exp_continue是匹配一行后,从当前expect块第一行开始匹配 expect块的每一行匹配后,直接退出当前expect块,往下一个expect块开始匹配 ex ...

  8. javascript基本语法点

    1. getElementById例:<input type="text" id="user" />则getElementById('user'). ...

  9. CF #546 D.E

    D coun[i]表示[i]这个数右边有多少个数j能和他组成题中所给的二元组(i,j) 如果一个数的coun[i]=n-i-ans 那么说明他可以与最后一个交换 同时不计算贡献 因为它是向右走的 对左 ...

  10. C - Nuske vs Phantom Thnook

    题意:n*m矩阵,n,m<=2e3,矩阵中的1能走到相邻4个1上,0代表障碍,若两个1联通 则只有一条路径 q个询问,q<=2e5,每次询问一个子矩阵中有多少个连通分量? 同一个连通分量中 ...