概述
c# 连接rabbitMq helper类型。
nuget下载包 RabbitMQ.Client
RabbitHelper
using ***.SCM.Core.Services.mq;
using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class RabbitmqHelper
{
private static log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private RabbitmqConType _connectionType;
private IConnection _connection;
private IModel channel;
public RabbitmqHelper(RabbitmqConType connectionType)
{
_connectionType = connectionType;
}
public IConnection getConnection()
{
if (RabbitmqConType.SysRabbitmq == _connectionType)
{
var uri = new Uri(RabbitmqConfig.sys_rabbitmq_address);
var factory = new ConnectionFactory
{
UserName = RabbitmqConfig.sys_rabbitmq_username,
Password = RabbitmqConfig.sys_rabbitmq_password,
VirtualHost = RabbitmqConfig.sys_rabbitmq_virtualhost,
RequestedHeartbeat = 0,
Endpoint = new AmqpTcpEndpoint(uri),
AutomaticRecoveryEnabled = true
};
var connection = factory.CreateConnection("scm.sys.connection");
this._connection = connection;
return connection;
}
else if (RabbitmqConType.MdsRabbitmq == _connectionType)
{
var uri = new Uri(RabbitmqConfig.mds_rabbitmq_address);
var factory = new ConnectionFactory
{
UserName = RabbitmqConfig.mds_rabbitmq_username,
Password = RabbitmqConfig.mds_rabbitmq_password,
VirtualHost = RabbitmqConfig.mds_rabbitmq_virtualhost,
RequestedHeartbeat = 0,
Endpoint = new AmqpTcpEndpoint(uri),
AutomaticRecoveryEnabled = true
};
var connection = factory.CreateConnection("scm.mds.connection");
this._connection = connection;
return connection;
}
else if (RabbitmqConType.ScmRabbitmq == _connectionType)
{
var uri = new Uri(RabbitmqConfig.scm_rabbitmq_address);
var factory = new ConnectionFactory
{
UserName = RabbitmqConfig.scm_rabbitmq_username,
Password = RabbitmqConfig.scm_rabbitmq_password,
VirtualHost = RabbitmqConfig.scm_rabbitmq_virtualhost,
RequestedHeartbeat = 0,
Endpoint = new AmqpTcpEndpoint(uri),
AutomaticRecoveryEnabled = true
};
var connection = factory.CreateConnection("scm.connection");
this._connection = connection;
return connection;
}
return null;
}
/// <summary>
/// 获取channel
/// </summary>
/// <returns></returns>
public IModel getChannel()
{
if (_connection == null || channel == null || !_connection.IsOpen || !channel.IsOpen)
{
getConnection();
channel = _connection.CreateModel();
//if (RabbitType.sys_rabbitmq == _rabbitType)
//{
// var uri = new Uri(RabbitmqConfig.sys_rabbitmq_address);
// var factory = new ConnectionFactory
// {
// UserName = RabbitmqConfig.sys_rabbitmq_username,
// Password = RabbitmqConfig.sys_rabbitmq_password,
// VirtualHost = RabbitmqConfig.sys_rabbitmq_virtualhost,
// RequestedHeartbeat = 0,
// Endpoint = new AmqpTcpEndpoint(uri)
// };
// _connection = factory.CreateConnection();
// channel = _connection.CreateModel();
//}
//if (RabbitType.mds_rabbitmq == _rabbitType)
//{
// var uri = new Uri(RabbitmqConfig.mds_rabbitmq_address);
// var factory = new ConnectionFactory
// {
// UserName = RabbitmqConfig.mds_rabbitmq_username,
// Password = RabbitmqConfig.mds_rabbitmq_password,
// VirtualHost = RabbitmqConfig.mds_rabbitmq_virtualhost,
// RequestedHeartbeat = 0,
// Endpoint = new AmqpTcpEndpoint(uri)
// };
// _connection = factory.CreateConnection();
// channel = _connection.CreateModel();
//}
//if (RabbitType.scm_rabbitmq == _rabbitType)
//{
// var uri = new Uri(RabbitmqConfig.scm_rabbitmq_address);
// var factory = new ConnectionFactory
// {
// UserName = RabbitmqConfig.scm_rabbitmq_username,
// Password = RabbitmqConfig.scm_rabbitmq_password,
// VirtualHost = RabbitmqConfig.scm_rabbitmq_virtualhost,
// RequestedHeartbeat = 0,
// Endpoint = new AmqpTcpEndpoint(uri)
// };
// _connection = factory.CreateConnection();
// channel = _connection.CreateModel();
//}
}
return channel;
}
/// <summary>
/// 释放channel
/// </summary>
public void disposeChannel()
{
if (_connection == null || channel == null || !_connection.IsOpen || !channel.IsOpen)
{
_connection.Dispose();
channel.Dispose();
}
}
}
RabbitmqConType
/// <summary>
/// rabbitmq连接类型
/// </summary>
public enum RabbitmqConType
{
/// <summary>
/// Sys-rabbitmq
/// </summary>
SysRabbitmq = 0,
/// <summary>
/// Mds-rabbitmq
/// </summary>
MdsRabbitmq = 1,
/// <summary>
/// scm-rabbitmq
/// </summary>
ScmRabbitmq = 2,
}
web.config
<add key="sys_rabbitmq_address" value="amqp://127.0.0.1:5672/,amqp://127.0.0.2:5672/,amqp://127.0.0.3:5672//>
<add key="sys_rabbitmq_username" value="1"/>
<add key="sys_rabbitmq_password" value="1"/>
<add key="mds_rabbitmq_address" value="amqp://127.0.0.1:5672/,amqp://127.0.0.2:5672/,amqp://127.0.0.3:5672/"/>
<add key="mds_rabbitmq_username" value="1"/>
<add key="mds_rabbitmq_password" value="1"/>
<add key="mds_rabbitmq_virtualhost" value="mds"/>
<add key="scm_rabbitmq_address" value="amqp://127.0.0.1:5672/,amqp://127.0.0.2:5672/,amqp://127.0.0.3:5672/"/>
<add key="scm_rabbitmq_username" value="1"/>
<add key="scm_rabbitmq_password" value="1"/>
<add key="scm_rabbitmq_virtualhost" value="scm"/>
创建队列交换机
//参数1(String queue):指定队列的名称,如果队列不存在,则会自动创建一个队列,名称为传入的queue;
//参数2(boolean druable):定义队列特性是否需要持久化,如果为false,即在下一次启动mq时,队列会被删除。如果为true,下一次启动时,队列仍会存在,但需要注意的是,队列中的消息不会保留,下一次启动时,队列为空。 如果需要消息的持久化,可以在利用basicPublish函数传递消息时,指明MessageProperties.PERSISTENT_TEXT_PLAIN,下次启动时,会恢复队列中的消息。
//参数3(boolean exclusive):是否独占队列,如果为true,则该队列只能与当前的通道绑定,其他的通道访问不了该队列
//参数4(boolean autoDelete):是否自动删除,在消费者消费完队列中的数据并与该队列连接断开时,是否要删除该队列
//参数5(Map < String, Object > arguments):额外参数设置
RabbitmqHelper scmRabbitHelper = new RabbitmqHelper(RabbitmqConType.ScmRabbitmq);
var channel = scmRabbitHelper.getChannel();
channel.ExchangeDeclare(exchange: RabbitmqConfig.scm_letsign_exchange, type: ExchangeType.Fanout, durable: true, autoDelete: false, arguments: null);
//自动签署
channel.QueueDeclare(queue: RabbitmqConfig.scm_autosign_queue, durable: true, exclusive: false, autoDelete: false, arguments: null);
channel.QueueBind(queue: RabbitmqConfig.scm_autosign_queue, exchange: RabbitmqConfig.scm_letsign_exchange, routingKey: RabbitmqConfig.scm_autosign_queue, arguments: null);