RabbitMQ:安装、配置与使用初探

一、下载及安装

首先去官网下载最新版本:http://www.rabbitmq.com/download.html 
当前最新版是3.5.6,我需要在CentOS上安装,所以下载了那个RPM包。安装过程就非常方便了,先安装一个erlang,我是直接在rabbitmq官网上下载到合适的RPM包,http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm。如果你在安装erlang时遇到缺失包,那就先安装需要的东西吧。

# rpm -ihv erlang-18.1-1.el6.x86_64.rpm
# rpm -ihv rabbitmq-server-3.5.6-1.noarch.rpm
 
 
  • 1
  • 2
  • 1
  • 2

缺省配置先启动看看:

# /sbin/service rabbitmq-server start
Starting rabbitmq-server: SUCCESS                        
 
 
  • 1
  • 2
  • 1
  • 2

如果启动报这个错误:epmd error for host “demo”: timeout ,那么只需要修改一下hosts文件,增加你的主机名,注意,比如你的主机叫 demo.woplus,在hosts中配了 127.0.0.1 demo.woplus 也不行,你需要在hosts中再加一个 127.0.0.1 demo。

二、配置

原本想直接先HelloWorld的,但是不行,如果没有做一些必要的权限配置,后面那个HelloWorld是跑不起来的。所以,先说说安装之后要做的几件事。

第一件事要创建用户,因为缺省的guest/guest用户只能在本地登录,所以先用命令行创建一个admin/admin123,并让他成为管理员。

# ./rabbitmqctl add_user admin admin123
# ./rabbitmqctl set_user_tags admin administrator
 
 
  • 1
  • 2
  • 1
  • 2

然后,我们启用WEB管理。

# ./rabbitmq-plugins enable rabbitmq_management
 
 
  • 1
  • 1

现在可用使用浏览器访问管理台,就用刚才创建的admin登录即可,端口是15672。 
这里写图片描述

在管理台我们,我们需要为刚才的admin配置权限,见上图,点名字进去即可,conf/write/read 都配成缺省显示的那个.* 即可。

然后我们新建一个用户 test/test123,一会儿用它来写HelloWorld。

我并没有做其它配置,这意味着我们使用的是缺省配置,基本够用了,如果以后有需要再修改吧,可以参考官网上的帮助:http://www.rabbitmq.com/configure.html#config-items

三、Java Client

现在可以来个 Say HelloWorld了。

我用Maven新建一个工程,修改POM文件,增加如下:

  <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>3.5.6</version>
    </dependency>
  </dependencies>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

使用官方的Java-client即可。然后代码如下:

public class App 
{
    private final static String QUEUE_NAME = "hello";
    static boolean isBreak =false;

    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );

        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("test");
        factory.setPassword("test123");
        factory.setHost("192.168.0.197");
        factory.setVirtualHost("/");
        factory.setPort(5672);

        try {
            Connection connection = factory.newConnection();
            Channel channel =  connection.createChannel();

            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(" [x] Received '" + message + "'");
                    isBreak=true;
                  }
                };
            channel.basicConsume(QUEUE_NAME, true, consumer);


            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");

            while(!isBreak){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            channel.close();
            connection.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TimeoutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 


    }
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

大概说明一下,ConnectionFactory先填上创建连接要的参数(主机地址、登录账户等),然后就是newConnection()得到Connection,并创建出一个频道Channel。 
从Channel我们可以构造出一个消费者Consumer用来监听收到的消息,也可以使用channel发布消息。RabbitMQ的消息是byte[],所以需要将字串转成字节数组才能发送。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值