zoukankan      html  css  js  c++  java
  • rabbitMq学习一

    1、安装rabbitmq 

    Windows下安装

    首先,我们访问官网【https://www.rabbitmq.com/】,点击Get Started。

    选择下载安装,由于RabbitMQ使用Erlang语言编写,所以先安装RabbitMQ之前需要安装erlang环境,如果没安装erlang环境在安装rabbitmq的时候会有提示,按提示下载安装就可以,安装erlang之后需要配置环境,配置如下

     然后验证是否安装成功:

     

    安装完RabbitMQ服务端后,我们还是启动CMD,用命令行来查看下安装状态。

    首先输入下面的命令,将路径定位到RabbitMQ的路径下:

    【CD /D C:Program FilesRabbitMQ Server abbitmq_server-3.8.0sbin】

    然后输入rabbitmqctl status查看状态。

     

     然后启动管理工具 的命令行:rabbitmq-plugins enable rabbitmq_management

    启动成功后打开浏览器 输入 http://127.0.0.1:15672/ 进入管理页面

    到此,RabbitMQ服务端的环境配置好了,正常情况,这些配置应该在服务器进行,但我为了测试方便,就把服务端也安装在本机了,因此我下面调用RabbitMQ时,连接的主机IP都是localhost。

     好了,环境配置完之后就开始撸代码了

    下面我们先建一个两个控制台项目,一个RbbitmqSend ,另一个 是RabbitmqReceived

    然后引入RabbitMQ的开源类库。

    send里的代码

    using RabbitMQ.Client;
    using System;
    using System.Threading;

    namespace RabbitmqSend
    {
    class Program
    {
    static void Main(string[] args)
    {
    var factory = new ConnectionFactory();
    factory.HostName = "localhost";
    factory.UserName = "guest";//默认用户名,用户可以在服务端自定义创建,有相关命令行
    factory.Password = "guest";//默认密码
    using (var connection = factory.CreateConnection())//连接服务器,即正在创建终结点。
    {
    //创建一个通道,这个就是Rabbit自己定义的规则了,如果自己写消息队列,这个就可以开脑洞设计了
    //这里Rabbit的玩法就是一个通道channel下包含多个队列Queue
    using (var channel = connection.CreateModel())
    {
    for (int i = 0; i < 100; i++)
    {
    channel.QueueDeclare("rabbitmqName", false, false, false, null);//创建一个名称为rabbitmq1的消息队列
    var properties = channel.CreateBasicProperties();
    properties.DeliveryMode = 1;
    string message = "I am rabbitmq" + i.ToString(); //传递的消息内容
    channel.BasicPublish("", "rabbitmqName", properties, System.Text.Encoding.UTF8.GetBytes(message)); //生产消息
    Console.WriteLine($"Send:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} {message}");
    Thread.Sleep(3000);
    }
    }
    }
    }
    }
    }

    reveiced里的代码

    using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace RabbitmqReveiced
    {
    class Program
    {
    static void Main(string[] args)
    {
    var factory = new ConnectionFactory();
    factory.HostName = "localhost";
    factory.UserName = "guest";
    factory.Password = "guest";
    List<string> sss = new List<string>();
    using (var connection = factory.CreateConnection())
    {
    using (var channel = connection.CreateModel())
    {
    channel.QueueDeclare("rabbitmq1", false, false, false, null);

    /* 这里定义了一个消费者,用于消费服务器接受的消息
    * C#开发需要注意下这里,在一些非面向对象和面向对象比较差的语言中,是非常重视这种设计模式的。
    * 比如RabbitMQ使用了生产者与消费者模式,然后很多相关的使用文章都在拿这个生产者和消费者来表述。
    * 但是,在C#里,生产者与消费者对我们而言,根本算不上一种设计模式,他就是一种最基础的代码编写规则。
    * 所以,大家不要复杂的名词吓到,其实,并没那么复杂。
    * 这里,其实就是定义一个EventingBasicConsumer类型的对象,然后该对象有个Received事件,
    * 该事件会在服务接收到数据时触发。
    */
    var consumer = new EventingBasicConsumer(channel);//消费者
    channel.BasicConsume("rabbitmqName", true, consumer);//消费消息
    consumer.Received += (model, ea) =>
    {
    var msgBody = Encoding.UTF8.GetString(ea.Body);
    sss.Add(msgBody);
    Console.WriteLine(string.Format("reviceiced:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
    int dots = msgBody.Split('.').Length - 1;
    System.Threading.Thread.Sleep(dots * 1000);
    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
    };
    Console.WriteLine(sss.Count);
    Console.WriteLine("按任意值,退出程序");
    Console.ReadKey();
    }
    }
    }
    }
    }

  • 相关阅读:
    mysql命令汇总
    python中魔术方法和属性汇总
    python关于import的汇总
    linux命令汇总
    python之高并发问题汇总
    python中路径查找汇总
    python之进程,线程,协程,进程间通信,锁汇总
    python之迭代器,生成器,递归等归纳
    python 之网络编程汇总
    【SpringFramework】Spring JdbcTemplate
  • 原文地址:https://www.cnblogs.com/qingfenglin/p/12023614.html
Copyright © 2011-2022 走看看