以前使用的是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. JS基本语法---while循环

    循环:一件事不停的或者是重复的做 循环要有结束的条件,循环还应该有计数器(记录循环的次数的) while循环      while循环语法:   计数器 var 变量=0; while(循环的条件){ ...

  3. Vuex基本使用的总结--转载

    在 Vue 的单页面应用中使用,需要使用Vue.use(Vuex)调用插件.使用非常简单,只需要将其注入到Vue根实例中. import Vuex from 'vuex' Vue.use(Vuex) ...

  4. Google在情报搜集中的基础技巧

    Google在情报搜集中的基础技巧 作者:王宇阳 时间:2019-06-06 作者笔记 ​ Google Hacking 是指使用特定的高级的google搜索语法,收集渗透测试目标的信息,查找目标的配 ...

  5. 【微信小程序】template模板使用详解

    WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用. 模板的作用域: 模板拥有自己的作用域,只能使用 data 传入的数据以及模板定义文件中定义的 <wxs / ...

  6. TypeScript 学习笔记(三)

    类: 1.TypeScript 是面向对象的 JavaScript,类描述了创建的对象共同的属性和方法 2.类通过关键字 class 声明,使用 extends 关键字进行继承 3.在引用一个类成员时 ...

  7. stl标准库 iterator_traits

    为什么标准库里要有traits? 我们先回忆一下,标准库提供的算法的一些特征: 参数一般包括iterator. 要根据iterator的种类,和iterator包装的元素的类型等信息,来决定使用最优化 ...

  8. 6.3 使用Spark SQL读写数据库

    Spark SQL可以支持Parquet.JSON.Hive等数据源,并且可以通过JDBC连接外部数据源 一.通过JDBC连接数据库 1.准备工作 ubuntu安装mysql教程 在Linux中启动M ...

  9. luoguP3979 遥远的国度

    换根的树剖 https://www.luogu.org/problem/P3979 题意: (出题人口活好.... 给定一棵以 root 为根的 n 个点的有根树,对于任意一个点 x, 给定他 的点权 ...

  10. JavaScript中的数组Array

    抄自:https://www.jianshu.com/p/7e160067a06c js中数组的方法种类众多,有ES5之前版本中存在的,ES5新增,ES6新增等:并且数组的方法还有原型方法和从obje ...