以前使用的是Windows下面的RabbitMq,需要先安装 Erlang的语言环境等,这次直接在Linux中的Docker容器来测试一下

1:docker配置RabbitMq的指令

  docker run -d --hostname myrabbit --restart=always --name rabbitmq -p 5672:5672 -p 15672:15672 
  -e RABBITMQ_DEFAULT_USER=fengge -e RABBITMQ_DEFAULT_PASS=qqlove rabbitmq:3-management

  指令的含义应该都看得明白,这里不在描述了

2:查看RbbitMq容器已经启起来

3:代码:

 Product生产者测试代码:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsForms
{
using RabbitMQ.Client;
using RabbitMQ;
using RabbitMQ.Client.Framing.Impl;
using RabbitMQ.Util;
using RabbitMQ.Client.Framing;
using RabbitMQ.Client.Events; public partial class RbbitMqSendMsg : Form
{
private static readonly string queueName = "insert_to_person";
private static readonly string exchangeName = "Insert";
private static readonly string ruterKey = "router.Insert"; /*
direct,fanout,topic,headers
直接, 扇出,主题, 标题
*/
private static readonly string exchangeType = "direct";
private static readonly ConnectionFactory rabitFactory = new ConnectionFactory
{
UserName = "fengge",
Password = "F88",
RequestedHeartbeat = ,
Endpoint = new AmqpTcpEndpoint(new Uri("amqp://192.168.***.***:5672/"))
};
public RbbitMqSendMsg()
{
InitializeComponent();
}
private void SimpelMQ()
{
try
{
//创建一个连接的工厂
using (var conn = rabitFactory.CreateConnection())
{
//类似创建一个管道
using (var channel = conn.CreateModel())
{
//声明一个队列,设置队列是否持久化,排他性,与自动删除
channel.ExchangeDeclare(exchangeName, exchangeType);
channel.QueueDeclare(queueName, true, false, false);
// 绑定消息队列,交换器,routingkey
channel.QueueBind(queueName, exchangeName,routingKey: queueName);
IBasicProperties propertity = channel.CreateBasicProperties();
propertity.Persistent = true;//队列持久化
for (int i = ; i < ; i++)
{
byte[] bymsg = Encoding.UTF8.GetBytes($"我是风格{i},现在时间是:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
channel.BasicPublish(exchangeName, ruterKey, propertity, bymsg);
}
}
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
} private void SampleTypeSend_Click(object sender, EventArgs e)
{
SimpelMQ();
}
}
}

 Consumer消费者测试代码:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsForms02
{
using RabbitMQ.Client;
public partial class Form1 : Form
{
private static readonly string queueName = "insert_to_person";
private static readonly string exchangeName = "Insert";
private static readonly string ruterKey = "router.Insert"; /*
direct,fanout,topic,headers
直接, 扇出,主题, 标题
*/
private static readonly string exchangeType = "direct";
private static readonly ConnectionFactory rabitFactory = new ConnectionFactory
{
UserName = "fengge",
Password = "F88",
RequestedHeartbeat = ,
Endpoint = new AmqpTcpEndpoint(new Uri("amqp://192.168.***.***:5672/")),
};
public Form1()
{
InitializeComponent();
System.Threading.Thread t2 = new System.Threading.Thread(() => {
ConsumerMsgSimpleMq();
});
t2.IsBackground = true; t2.Start();
} private void ConsumerMsgSimpleMq()
{
//创建一个连接的工厂
using (var conn = rabitFactory.CreateConnection())
{
//类似创建一个管道
using (var channel = conn.CreateModel())
{
channel.ExchangeDeclare(exchangeName, exchangeType);
//声明一个队列,设置队列是否持久化,排他性,与自动删除
channel.QueueDeclare(queueName, true, false, false);
// 绑定消息队列,交换器,routingkey
channel.QueueBind(queueName, exchangeName, ruterKey);
////定义这个队列的消费者
//QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
////false为手动应答,true为自动应答
//channel.BasicConsume(queueName, false, consumer);
while (true)
{
try
{
BasicGetResult result = channel.BasicGet(queueName, false);
if (result != null)
{
byte[] by = result.Body;
string messageStr = Encoding.UTF8.GetString(by);
//如果是自动应答,下下面这句代码不用写啦。
Console.WriteLine("---->" + messageStr);
if (!string.IsNullOrEmpty(messageStr))
{
channel.BasicAck(result.DeliveryTag, false);
}
}
}
catch (Exception)
{
}
}
}
}
}
}
}

4:启动多个客服端,其他的启动我们可以以调试的模式打开客服端

5:测试的效果:

在Linux系统中运行并简单的测试RabbitMq容器的更多相关文章

  1. 使用mybatis assembly插件打成tar包,在linux系统中运行服务

    使用mybatis assembly插件打成tar包,在linux系统中运行服务 assembly插件插件地址: 链接:https://pan.baidu.com/s/1i6bWPxF 密码:gad5 ...

  2. 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本

    目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...

  3. 学习Linux系统中命令的简单方法

    如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中“一切皆文件”概念虽然说是没有错,是对的.但是 ...

  4. Anbox —— 在 Linux 系统中运行 Android 应用

    具有以下特性: 没有限制:由于 Anbox 运行着整个 Android 系统,所以理论上任何应用都可以在其中运行 安全:Anbox 将 Android APP 放进一个密封的盒子中,无需直接访问硬件或 ...

  5. 能够在Linux系统中运行的5款大型耐玩游戏

    Linux 可能不会很快成为游戏玩家选择的平台 —— Valve Steam Machines 的失败似乎是对这一点的深刻提醒 —— 但这并不意味着该平台没有稳定增长,并且拥有相当多的优秀游戏. 从独 ...

  6. windows系统下的maven项目放到linux系统中运行时报org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnection这种异常的解决办法

    这个错误的解决办法其实很简单你把连接mysql数据库的那个jar包换成linux版本的就行了: linux版本的连接mysql数据库的jar包链接:http://files.cnblogs.com/f ...

  7. linux系统中运行node进程,无法杀死进程

    events.js:72 throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE at errnoException (net.j ...

  8. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...

  9. Linux系统中的load average(平均负载/运行队列)

    1.load average 的含义 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度) linux系统中的Load对当前CPU工作量的 ...

随机推荐

  1. Python笔记:设计模式之代理模式

    代理通常就是一个介于寻求方和提供方之间的中介系统.其核心思想就是客户端(寻求方)没有直接和提供方(真实对象)打交道,而是通过代理对象来完成提供方提供的资源或操作. 代理其实就是封装实际服务对象的包装器 ...

  2. Java生鲜电商平台-订单配送模块的架构与设计

    Java生鲜电商平台-订单配送模块的架构与设计 生鲜电商系统最终的目的还是用户下单支付购买, 所以订单管理系统是电商系统中最为复杂的系统,其作为中枢决定着整个商城的运转, 本文将对于生鲜类电商平台的订 ...

  3. ABP进阶教程10 - PDF导出中文乱码

    点这里进入ABP进阶教程目录 问题描述 功能按钮 - 导出PDF,中文信息导出为乱码. 解决方案 导出PDF是通过pdfmake.js实现的. 检查发现是pdfmake引用的vfs_fonts.js字 ...

  4. Python中 if __name__ == '__main__' 的作用

    Python文件可以直接运行,也可以 import 到其它文件中使用 if __name__ == '__main__' 就是控制代码在这两种情况下的执行过程 每个Python模块都包含内置变量,直接 ...

  5. shell脚本模板----自动生成开头注释信息

    每当我们新建一个shell脚本都要去写一些繁琐的注释信息,这会浪费掉我们很多的时间,有没有感觉很痛苦呢? 哈哈 下面给大家分享一个shell脚本的模板文件,把它拷贝到用户的家目录下并命名成  .vim ...

  6. [Linux] SSH隧道本地端口转发访问远程服务中的数据库

    当我的本地没有安装任何数据库服务的时候,可以直接通过我本地的端口访问远程机器上的数据库服务,实现这样的效果就可以使用本地转发功能 实际测试本地端口转发,把本地的9006端口转发给远程服务器的115.1 ...

  7. requests---requests发送xml数据类型

    上一篇简单的介绍了post常见的4种数据类型,今天我们一起学习通过requests发送xml数据类型 xml数据类型 下方数据为xml数据,我们就通过这段数据学习如果通过requests发送xml数据 ...

  8. day58_9_24多对多建表手动,form组件(判断类型),cookies和session

    一.多对多建表关系之手动添加. 1.全自动 像之前讲过的一样,我们可以通过manytomanyField的字段来建立多对多关系: class Book(models.Model): title = m ...

  9. selenium环境搭建:

    环境搭建 基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器:没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个I ...

  10. win10,anconda, python3.6安装dlib19.17

    目的和经验: 几个月前在笔记本上安过一次,按着教程用cmake编译其实也蛮简单的,不过当初忘了收藏了.现在换了台机子需要重新安装一遍,奈何之前的帖子找不到了. pypi 网站上有19.8.whl,如果 ...