接上一篇: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. DOM解析xml学习笔记

    一.dom解析xml的优缺点 由于DOM的解析方式是将整个xml文件加载到内存中,转化为DOM树,因此程序可以访问DOM树的任何数据. 优点:灵活性强,速度快. 缺点:如果xml文件比较大比较复杂会占 ...

  2. Hadoop生态圈学习-1(理论基础)

    一.大数据技术产生的背景 1. 计算机和信息技术(尤其是移动互联网)的迅猛发展和普及,行业应用系统的规模迅速扩大(用户数量和应用场景,比如facebook.淘宝.微信.银联.12306等),行业应用所 ...

  3. java 对 final 关键字 深度理解

    基础理解 : 1.修饰类 当用final去修饰一个类的时候,表示这个类不能被继承.处于安全,在JDK中,被设计为final类的有String.System等,这些类不能被继承 .注意:被修饰的类的成员 ...

  4. 使用Stream方式处理集合元素

    package com.itheima.demo03.Stream;import java.util.ArrayList;import java.util.stream.Stream;/** * @a ...

  5. 【HarmonyOS】【DevEco Studio】NOTE04:How to Jump to a Page(页面间的跳转)

    页面创建与基本设置 创建页面 创建两个新页面,分别为AbilityPage1.AbilityPage2 设置页面基本内容 以AbilityPage1为例 导包 import com.example.m ...

  6. python3约瑟夫环问题

    问题描述:n个人围成一个圈,从第一个人开始数1,数到第k个出局,然后下一个人继续从1数,求出局人编号 思路:将所有人编号放到数组里,一个人出局后,下一个人加上k对数组长度求余,得出下一个要删除的编号. ...

  7. 三维引擎导入obj模型不可见总结

    最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况.上一篇文章说了全黑的情况.此文说下不可见的情况. 经过测试,发现可能有如下两种情况. 导入的模型不在镜头视野内 导入的模型 ...

  8. Vector Demo

    /* * vectorDemo.cpp * * Created on: Jul 17, 2014 * Author: lichfeng */ #include<vector> #inclu ...

  9. box-shadow(盒子阴影)

    box-shadow 属性可以设置一个或多个下拉阴影的框 可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开.该属性可设置的值包括阴影的X轴偏移量.Y轴偏移量.模糊半径.扩散半径和颜色. 语法: ...

  10. 筛选(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 [视图]选项卡下有个[筛选器],筛选功能就在里面实现. 比如按[里程碑]筛选. 按[日期范围],再指定个起始日期和结束日期 ...