第一个知识点:创建用户命令
rabbitmqctl.bat add_user xuw xuwpassword
如果报错:TCP connection succeeded but Erlang distribution failed
两种解决办法:
- 使用旧版本Erlang
- cookie替换到正确的位置
打开路径C:\Windows\System32\config\systemprofile
我们看到了这里有一个.erlang.cookie,复制这个文件到C:\Users\你的用户名
下
如果没有这个文件,请打开菜单栏的Erlang快捷方式,出现白色窗口的时候,
C:\Windows\System32\config\systemprofile
这个目录下就会出现这个文件,可能会慢一些耐心等
要确保C:\Windows\System32\config\systemprofile
和C:\Users\你的用户名
下的cookie是同一个文件!
替换完成后,无需重启服务,直接rabbitmqctl status
,如图这样就成功了。
第二个知识点:设置管理员
rabbitmqctl.bat set_user_tags zhangweizhong administrator
第三个知识点:设置权限
rabbitmqctl.bat set_permissions -p / zhangweizhong ".*" ".*" ".*"
第四个知识点:新建虚拟主机
使用浏览器打开http://localhost:15672
访问 RabbitMQ 的管理控制台,使用刚才创建的账号登陆系统即可。RabbitMQ 管理后台,可以更好的可视化方式查看 RabbitMQ 服务器实例的状态。
登录账号:选择Admin
第五个知识点:链接rabbitMQ
RabbitMQ 由 Producer(生成者) 和 Consumer(消费者)两部分组成。Weiz.Consumer 就是 Consumer(消费者),Weiz. Producer 为 Producer(生成者),Weiz.MQ 为消息队列的通用处理类库。
(1)Weiz.MQ 项目,消息队列的通用处理类库,用于正在的订阅和发布消息。
- 通过 nuget 安装项目 EasyNetQ 相关组件;
- 增加 BusBuilder.cs 管道创建类,主要负责链接 RabbitMQ.
using System;
using System.Configuration;
using EasyNetQ;
namespace Weiz.MQ
{
/// <summary>
/// 消息服务器连接器
/// </summary>
public class BusBuilder
{
public static IBus CreateMessageBus()
{
// 消息服务器连接字符串
// var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQ"];
string connString = "host=127.0.0.1:5672;virtualHost=vhostxwu09;username=xuw09;password=xuw09";
if (connString == null || connString == string.Empty)
{
throw new Exception("messageserver connection string is missing or empty");
}
return RabbitHutch.CreateBus(connString);
}
}
}
- 增加 IProcessMessage 类,定义了一个消息方法,用于消息传递
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Weiz.MQ
{
public interface IProcessMessage
{
void ProcessMsg(Message msg);
}
}
- 增加 Message 类,定义了消息传递的实体属性字段等信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Weiz.MQ
{
public class Message
{
public string MessageID { get; set; }
public string MessageTitle { get; set; }
public string MessageBody { get; set; }
public string MessageRouter { get; set; }
}
}
- 增加 MQHelper 类,用于正在的订阅和发布消息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using EasyNetQ;
namespace Weiz.MQ
{
public class MQHelper
{
/// <summary>
/// 发送消息
/// </summary>
public static void Publish(Message msg)
{
创建消息bus
IBus bus = BusBuilder.CreateMessageBus();
try
{
bus.Publish(msg, x => x.WithTopic(msg.MessageRouter));
}
catch (EasyNetQException ex)
{
//处理连接消息服务器异常
}
bus.Dispose();//与数据库connection类似,使用后记得销毁bus对象
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="msg"></param>
public static void Subscribe(Message msg, IProcessMessage ipro)
{
创建消息bus
IBus bus = BusBuilder.CreateMessageBus();
try
{
bus.Subscribe<Message>(msg.MessageRouter, message => ipro.ProcessMsg(message), x => x.WithTopic(msg.MessageRouter));
}
catch (EasyNetQException ex)
{
//处理连接消息服务器异常
}
}
}
}
(2)RabbitMQ 由 Producer(生成者)
- 创建一个 aspx 页面,增加如下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Weiz.MQ;
namespace Weiz.Producer
{
public partial class TestMQ : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Message msg = new Message();
msg.MessageID = "1";
msg.MessageBody = DateTime.Now.ToString();
msg.MessageTitle = "1";
msg.MessageRouter = "test.xxx.com";
MQHelper.Publish(msg);
}
}
}
(3)Weiz.Consumer 就是 Consumer(消费者)
- 新增 OrderProcessMessage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Weiz.Consumer
{
public class OrderProcessMessage:MQ.IProcessMessage
{
public void ProcessMsg(MQ.Message msg)
{
Console.WriteLine(msg.MessageBody);
}
}
}
- Program 增加如下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Weiz.Consumer
{
class Program
{
static void Main(string[] args)
{
OrderProcessMessage order = new OrderProcessMessage();
MQ.Message msg = new MQ.Message();
msg.MessageID = "1";
msg.MessageRouter = "test.xxx.com";
MQ.MQHelper.Subscribe(msg, order);
}
}
}
生产方发送消息,订阅方不断接收消息
参考:https://blog.csdn.net/qq_35246620/article/details/72473098