接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列

  这里继续说下.net core集成使用ActiveMQ。因为代码比较多,所以放到gitee上:https://gitee.com/shanfeng1000/dotnetcore-demo/tree/master/Activemq

  感兴趣的可以克隆下来再按照自己的需求修改,这里简单介绍一下使用的Demo(Demo基于.net core3.1的版本,其他版本可能需要自行测试)  

  生产者(AspNetCore.WebApi.Producer)

  在Startup中添加相关服务项:  

    public void ConfigureServices(IServiceCollection services)
{
var brokerUris = new string[] { "192.168.209.133:61616", "192.168.209.134:61616", "192.168.209.135:61616" };
string userName = "test";
string password = "123456"; #region 日志记录 services.AddLogging(builder =>
{
builder.SetMinimumLevel(LogLevel.Trace);
});
services.AddActiveLogger(options =>
{
options.IsCluster = true;
options.ApplicationName = "WebApi";
options.BrokerUris = brokerUris;
options.Category = "Home";
options.UseQueue = false;
options.Destination = "logger";
options.MinLevel = LogLevel.Warning;
options.InitializeCount = 10;
options.IsPersistent = true;
options.Password = password;
options.UserName = userName;
}); #endregion
#region Active services.AddActiveProducer("active.queue", options =>
{
options.IsCluster = true;
options.BrokerUris = brokerUris;
options.Destination = "active.queue";
options.IsPersistent = true;
options.Transactional = false;
options.Password = password;
options.UserName = userName;
});
services.AddActiveProducer("active.topic", options =>
{
options.IsCluster = true;
options.BrokerUris = brokerUris;
options.Destination = "active.topic";
options.IsPersistent = true;
options.Transactional = false;
options.Password = password;
options.UserName = userName;
}); #endregion ......
}

  说明一下,对于日志记录,使用AddActiveLogger拓展方法注入ActiveLoggerProvider,这样当使用.net core的ILogger机制发送消息时,就可以直接将消息发送到ActiveMQ中去了。

  如果是普通的发布消息到ActiveMQ,需要先声明生产者的配置,在使用生产者时,只需要注入IActiveProducerFactory接口,然后使用这个接口的创建生产者就可以了,比如Home控制器中的用法:  

    [ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
ILogger<HomeController> logger;
IActiveProducerFactory activeProducerFactory;
public HomeController(ILogger<HomeController> logger, IActiveProducerFactory activeProducerFactory)
{
this.logger = logger;
this.activeProducerFactory = activeProducerFactory;
} /// <summary>
/// 日志
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
[HttpGet]
public string Get(string message)
{
logger.LogTrace($"Trace:{message}");
logger.LogDebug($"Debug:{message}");
logger.LogInformation($"Information:{message}");
logger.LogWarning($"Warning:{message}");
logger.LogError($"Error:{message}");
logger.LogCritical($"Critical:{message}"); return "success";
}
/// <summary>
/// 发送消息到队列
/// </summary>
/// <param name="message">消息</param>
/// <returns>success</returns>
[HttpGet("Queue")]
public async Task<object> Queue(string message)
{
message = message ?? "";
var producer = activeProducerFactory.Create("active.queue");
await producer.SendAsync(message); return "success";
}
/// <summary>
/// 发送消息到Topic
/// </summary>
/// <param name="message">消息</param>
/// <returns>success</returns>
[HttpGet("Topic")]
public async Task<object> Topic(string message)
{
message = message ?? "";
var producer = activeProducerFactory.Create("active.topic");
await producer.PublishAsync(message); return "success";
}
}

  

  消费者(AspNetCore.WebApi.Consumer)

  消费者注入就简单了,只需要在Startup中声明消费者配置及消息处理过程就可以了:  

    public void ConfigureServices(IServiceCollection services)
{
var brokerUris = new string[] { "192.168.209.133:61616", "192.168.209.134:61616", "192.168.209.135:61616" };
string userName = "test";
string password = "123456"; #region 日志记录 services.AddActiveConsumer(options =>
{
options.IsCluster = true;
options.BrokerUris = brokerUris;
options.ClientId = "logger";
options.Durable = true;
options.FromQueue = false;
options.Destination = "logger";
options.AutoAcknowledge = true;
options.SubscriberName = "logger";
options.Password = password;
options.UserName = userName;
}).AddListener(result =>
{
Console.WriteLine("Message From Topic logger:" + result.Message);
}); #endregion
#region Active services.AddActiveConsumer(options =>
{
options.IsCluster = true;
options.BrokerUris = brokerUris;
options.Durable = false;
options.Destination = "active.queue";
options.AutoAcknowledge = false;
options.FromQueue = true;
options.Password = password;
options.UserName = userName;
}).AddListener(result =>
{
Console.WriteLine("Message From queue:" + result.Message);
result.Commit();
}); services.AddActiveConsumer(options =>
{
options.IsCluster = true;
options.BrokerUris = brokerUris;
options.Durable = true;
options.Destination = "active.topic";
options.AutoAcknowledge = false;
options.FromQueue = false;
options.Password = password;
options.UserName = userName;
options.ClientId = "active.topic";
options.PrefetchCount = 10;
}).AddListener<MyActiveConsumerListener>();#endregion ......
}

  声明消费者使用AddActiveConsumer拓展方法,它返回一个builder,通过它的AddListener方法添加监听消息的处理程序,可以采用一个委托作为,也可以采用一个实现了IActiveConsumerListener接口的类,比这里的MyActiveConsumerListener:  

    public class MyActiveConsumerListener : IActiveConsumerListener
{
public Task ConsumeAsync(RecieveResult result)
{
Console.WriteLine("Message From topic:" + result.Message);
result.Commit();
return Task.CompletedTask;
}
}

  

ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列的更多相关文章

  1. Kafka基础教程(四):.net core集成使用Kafka消息队列

    .net core使用Kafka可以像上一篇介绍的封装那样使用(Kafka基础教程(三):C#使用Kafka消息队列),但是我还是觉得再做一层封装比较好,同时还能使用它做一个日志收集的功能. 因为代码 ...

  2. ActiveMQ基础教程(一):认识ActiveMQ

    ActiveMQ是Apache软件基金会所研发开源的消息中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 现在的消息队列有不少,RabbitMQ.Kafka.RocketMQ,Z ...

  3. ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列

    接上一篇:ActiveMQ基础教程(二):安装与配置(单机与集群) 安装部署好集群环境:192.168.209.133:61616,192.168.209.134:61616,192.168.209. ...

  4. ActiveMQ基础教程----简单介绍与基础使用

    概述 ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多 ...

  5. Qt零基础教程(四) QWidget详解篇

    在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...

  6. Qt零基础教程(四)QWidget详解(3):QWidget的几何结构

    Qt零基础教程(四)  QWidget详解(3):QWidget的几何结构 这篇文章里面分析了QWidget中常用的几种几何结构 下图是Qt提供的分析QWidget几何结构的一幅图,在帮助的 Wind ...

  7. ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...

  8. ActiveMQ基础教程(二):安装与配置(单机与集群)

    因为本文会用到集群介绍,因此准备了三台虚拟机(当然读者也可以使用一个虚拟机,然后使用不同的端口来模拟实现伪集群): 192.168.209.133 test1 192.168.209.134 test ...

  9. SpringCloud2.0 Ribbon 服务发现 基础教程(四)

    1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...

随机推荐

  1. rust方法集

    随机数.数字对比.控制台输入 use std::io; use std::cmp::Ordering; use rand::Rng; fn main() { println!("please ...

  2. 【spring AOP】@Pointcut的12种用法

    @Pointcut用来标注在方法上来定义切入点. 使用格式:@ 注解(value="表达标签 (表达式格式)").如:@Pointcut("execution(* com ...

  3. python中的虚拟环境(在jupyter和pycharm中的使用)

    1.通过anaconda新建虚拟环境 创建虚拟环境:conda create -n your_env_name python=3.6 激活虚拟环境:activate your_env_name(虚拟环 ...

  4. java多线程3:synchronized

    线程安全 多个线程共同访问一个对象的实例变量,那么就可能出现线程不安全的问题. 先看一段代码示例,定义一个对象 MyDomain1 public class MyDomain1 { private i ...

  5. mrctf2020_shellcode_revenge(可见符shellcode)!!!!

    第一次碰到这种题目,需要用可见符shellcode来做 题目我就不放了,我认为网上大佬会比我说的更加详细 [原创]纯字母shellcode揭秘-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pedi ...

  6. CF706A Beru-taxi 题解

    Content 有一个人在点 \((a,b)\) 等出租车.已知他周围共有 \(n\) 辆出租车,其中第 \(i\) 辆车在点 \((x_i,y_i)\) 上,速度为 \(v_i\).这个人想打能让他 ...

  7. Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)

    总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...

  8. mkdir创建目录时,如果上级目录没有是创建不成功的

    mkdir创建目录时,如果上级目录没有是创建不成功的 ,此时必须用 mkdirs()方法方可.

  9. python爬取信息到数据库与mysql简单的表操作

    python 爬取豆瓣top250并导入到mysql数据库中 import pymysql import requests import re url='https://movie.douban.co ...

  10. Java 中的5个代码性能提升技巧,最高提升近10倍

    文章持续更新,可以关注公众号程序猿阿朗或访问未读代码博客. 本文 Github.com/niumoo/JavaNotes 已经收录,欢迎Star. 这篇文章介绍几个 Java 开发中可以进行性能优化的 ...