zoukankan      html  css  js  c++  java
  • 【RabbitMQ】ubuntu下RabbitMQ安装与简单使用

    参考链接:

    1、安装:

    https://blog.csdn.net/a295277302/article/details/71246941
    https://blog.csdn.net/junzhen_chen/article/details/78459383

    2、使用:

    https://blog.csdn.net/hzw19920329/article/details/53156015
    https://blog.csdn.net/u014308482/article/details/53994401

    环境信息:

    OS:ubuntu16.04

    前期准备:

    1、ifconfig、ping命令查看网络是否正常

    2、配置源(即软件下载地址)

    安装(安装包方式可以参考参考链接中的1链接):

    1、由于rabbitMq使用erlang语言开发,在安装rabbitMq之前需要安装erlang

    sudo apt-get install erlang

    2、查看erlang版本:

     sudo erl

    3、安装rabbitMq:

    sudo apt-get install rabbitmq-server

    4、要查看服务器状态

    sudo rabbitmq

    5、安装插件

    sudo rabbitmq-plugins enable rabbitmq_manageme

    安装完成后系统默认启动。

     

    添加用户

    安装完成后在rabbitMQ中添加用户

    命令: sudo rabbitmqctl add_user 用户名 密码

    将用户设置为管理员(只有管理员才能远程登录)

    命令:sudo rabbitmqctl set_user_tags 用户名  administrator

    同时为用户设置读写等权限

    命令:sudo rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"

    安装完成

    使用以下链接进入插件提供的管理界面,用户名密码为上一步设置的用户名与密码(默认密码官网上找,我忘记了)

    http://IP:15672

    启动与停止:

    启动:sudo rabbitmq-server start
    关闭: sudo rabbitmq-server stop
    重启: sudo rabbitmq-server restart

    简单使用:

     

    1、导入依赖

        <dependencies>
            <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
            <dependency>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
                <version>5.0.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-rabbit</artifactId>
                <version>1.4.6.RELEASE</version>
            </dependency>
        </dependencies>

    2、消息生产者

    import com.rabbitmq.client.*;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 消息的生产者
     * 将想要发送的消息加入消息队列
     * @author ZX
     * 参考链接: https://blog.csdn.net/hzw19920329/article/details/53156015
                https://blog.csdn.net/u014308482/article/details/53994401
     */
    public class Producer {
        public  static  void main(String[]args) throws Exception{
            //1、创建链接对象
            ConnectionFactory factory = new ConnectionFactory();
            //rabbitmq所在ip,用户名密码
            factory.setHost("192.168.0.17");
            factory.setUsername("admin1");
            factory.setPort(5672);
            factory.setPassword("123456");
            Connection connection = factory.newConnection();
            //创建一个频道
            Channel channel = connection.createChannel();
            //声明一个dirent模式的交换机
            /**channel.exchangeDeclare(String exchange,String type,boolean durable,boolean autodelete....)
             参数1:exchange 交换机对象的名称
             参数2 type
             BuiltinExchangeType. DIRECT("direct"),定向发送消息
             BuiltinExchangeType. FANOUT("fanout"),会向所有的queue广播所有收到的消息。如log系统可使用此模式
             BuiltinExchangeType. TOPIC("topic"),
             BuiltinExchangeType. HEADERS("headers");
             参数3:durable:如果设置了true,本交换机在重启后也会生存(实际上不一定靠谱,设置为true就好)
             参数n:。。。。。。。
             */
            channel.exchangeDeclare("exchange_name", BuiltinExchangeType.DIRECT,true);
            //声明一个非持久化自动删除的队列,如果该队列不在被使用就删除他 zhe
            channel.queueDeclare("queue_name",false,false,true,null);
            //将绑定到改交换机
            channel.queueBind("queue_name","exchange_name","route_key");
            //声明一个消息头部
            AMQP.BasicProperties.Builder builder= new AMQP.BasicProperties.Builder();
            Map<String,Object> header=new HashMap<String, Object>();
            header.put("charset","utf-8");
            builder.headers(header);
            AMQP.BasicProperties basicProperties=builder.build();
            //将消息发出去
            channel.basicPublish("exchange_name","route_key",false,basicProperties,"消息的内容".getBytes());
            for (int i=0;i<100;i++){
                channel.basicPublish("exchange_name","route_key",false,basicProperties,("消息的内容"+i).getBytes());
            }
        }
    
    }
    

    3、消息消费者:

    import com.rabbitmq.client.*;
    import com.rabbitmq.client.BuiltinExchangeType;
    import java.io.IOException;
    
    public class Consumer {
        public  static  void main(String[]args) throws Exception{
            //1、创建链接对象
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("192.168.0.17");
            factory.setUsername("admin1");
            factory.setPort(5672);
            factory.setPassword("123456");
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
            //声明一个dirent模式的交换机
            /**channel.exchangeDeclare(String exchange,String type,boolean durable,boolean autodelete....)
                    参数1:exchange 交换机对象的名称
                    参数2 type
                    BuiltinExchangeType. DIRECT("direct"),
                    BuiltinExchangeType.        FANOUT("fanout"),
                    BuiltinExchangeType.    TOPIC("topic"),
                    BuiltinExchangeType.    HEADERS("headers");
             参数3:durable:如果设置了true,本交换机在重启后也会生存(实际上不一定靠谱,设置为true就好)
             参数n:。。。。。。。
            */
            channel.exchangeDeclare("exchange_name",BuiltinExchangeType.DIRECT,true);
            //声明一个非持久化自动删除的队列,如果该队列不在被使用就删除他
            channel.queueDeclare("queue_name",false,false,true,null);
            //将绑定到改交换机
            channel.queueBind("queue_name","exchange_name","route_key");
            //创建消费者对象
            com.rabbitmq.client.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 + "'");
                }
            };
            channel.basicConsume("queue_name", true, consumer);
        }
    }
    

     

     

     
     
     
     
  • 相关阅读:
    互联网预言大神:凯文·凯利——预测未来的12个趋势
    仅有算法远远不够:AI突破下一站,需要对硬件重新审视
    软件开发中经常使用的5种设计模式
    强化学习到底是什么,它如何运作?
    2020年网络安全的六大经验教训
    选择困难终结者:不同问题之下的机器学习算法
    为什么物联网如此重要?
    Pku3080 Blue Jeans
    pku1734 Musical Theme
    [Usaco2006 Dec]Milk Patterns
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054127.html
Copyright © 2011-2022 走看看