• 安装RabbitMq,写程序发送接收消息


    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 FilesRabbitMQ Server abbitmq_server-3.7.18sbin,然后打开控制台,进入这个目录.

    然后输入>rabbitmq-plugins enable rabbitmq_management

    C:Program FilesRabbitMQ Server
    abbitmq_server-3.7.18sbin>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 FilesRabbitMQ Server
    abbitmq_server-3.7.18sbin>

    这一步的目的是为了能使用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

  • 相关阅读:
    Spread Studio中文支持图解
    C#反射实例No.1
    关于XML序列化的简单例子
    将数据结构类型序列化和反序列化(BinaryFormatter类)
    获取计算机名称,IP,MAC地址
    原始套接字发送自定义IP包
    IP包首部格式
    struct和byte[]相互转换(用Marshal类实现)
    图片保存到数据库和从数据库读取图片并显示(C#)
    单词分析器源码
  • 原文地址:https://www.cnblogs.com/heyang78/p/11601941.html
Copyright © 2020-2023  润新知