Blazor+Dapr+K8s微服务之事件发布订阅
我们要实现的是:在blazorweb服务中发布一个事件,并传递事件参数,然后在serviceapi1服务中订阅该事件,接收到blazorweb服务中发布的事件和参数。
1 在blazorweb服务中发布一个事件
在DaprTest1.Server项目的WeatherForecastController.cs文件中增加事件发布API:
[HttpPost(nameof(PublishTestEvent))]
public async Task PublishTestEvent(TestEventModel eventModel)
{
await _daprClient.PublishEventAsync<TestEventModel>("pubsub", "TestEventName", eventModel);
}
"TestEventModel"是自定义的事件消息类,"TestEventName"是事件的名称,"pubsub" 是事件发布订阅的名称,定义在“pubsub.yaml” 组件中:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
spec:
type: pubsub.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
这个组件中定义的发布订阅采用了Redis 的 Stream 特性,要注意旧版本的Redis是否支持Stream。
2 在serviceapi1服务中订阅该事件
在DaprTest1.ServiceApi1项目中添加Dapr.AspNetCore包,该包实现了ASP.NET Core与Dapr的集成,例如依赖注入DaprClient对象,将事件订阅发布功能直接集成到 ASP.NET Core 模型绑定功能中等。

在DaprTest1.ServiceApi1项目的Startup.cs 文件增加事件订阅相关代码(注意绿色部分):
public void ConfigureServices(IServiceCollection services)
{ services.AddControllers().AddDapr();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "DaprTest1.ServiceApi1", Version = "v1" });
});
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "DaprTest1.ServiceApi1 v1"));
} app.UseRouting(); app.UseAuthorization(); app.UseCloudEvents(); app.UseEndpoints(endpoints =>
{
endpoints.MapSubscribeHandler();
endpoints.MapControllers();
});
}
在DaprTest1.ServiceApi1项目的WeatherForecastController文件增加事件订阅API
  [Topic("pubsub", "TestEventName")]
        [HttpPost(nameof(SubscribleTestEvent))]
        public async Task SubscribleTestEvent(TestEventModel eventModel)
        {
             await Task.CompletedTask;
        }
[Topic("pubsub", "TestEventName")] 订阅了"pubsub"订阅名称的TestEventName事件。
3 在Blazor项目中增加Blazor前端事件发布菜单和页面
@page "/pubsub"
@using DaprTest1.Shared
@using System.Text.Json
@inject HttpClient Http <h1>发布订阅</h1> <p>This component demonstrates publish and subscrible event.</p> <p>编码:<input type="text" @bind="eventModel.Code" />, 数量:<input type="text" @bind="eventModel.Amount" /></p> <button class="btn btn-primary" @onclick="PublishEvent">发布事件</button> @code {
private TestEventModel eventModel = new TestEventModel();
private async Task PublishEvent() => await Http.PostAsJsonAsync<TestEventModel>("WeatherForecast/PublishTestEvent", eventModel); }
4 事件发布订阅测试
和上一节一样,我们先开启每个微服务的SideCar,注意,因为的SideCar 指定了状态存储的Redis,所以我们先要开启Redis,不然SideCar会启动失败。确保每个微服务的SideCar都是运行状态。

然后启动两个微服务,并访问http://localhost:5000

在ServiceApi1服务的事件接收处设置好断点,然后点击“发布事件”按钮

可以看到,我们成功接收到了TestEventName事件和事件发布的参数。
5 将Dapr的发布订阅组件修改为RabbitMQ
通常情况下,我们会用RabbitMQ来支持事件的发布和订阅,我们将Dapr 发布订阅组件“pubsub.yaml”,修改为如下内容即可:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
spec:
type: pubsub.rabbitmq
version: v1
metadata:
- name: host
value: "amqp://admin:******@localhost:5672"
- name: durable
value: true
相关代码:iamxiaozhuang/dapr-test (github.com)
Blazor+Dapr+K8s微服务之事件发布订阅的更多相关文章
- Blazor+Dapr+K8s微服务之开发环境调试
		
1 安装Dapr开发调试环境 1.1 Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个 ...
 - Blazor+Dapr+K8s微服务之服务调用
		
1.1 Dapr环境配置 1.1.1 在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...
 - Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
		
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for deskto ...
 - Blazor+Dapr+K8s微服务之状态管理
		
1 状态管理服务器端接口 1.1 添加Dapr.AspNetCore包 在DaprTest1.Server项目中添加Dapr.AspNetCore包,该包实现了ASP. ...
 - ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现
		
这个EventBus的实现是基于微软微服务https://github.com/dotnet-architecture/eShopOnContainers项目的,我把它从项目中抽离出来,打包成nuge ...
 - 【性能测试实战】jmeter + k8s + 微服务 + skywalking + efk,测试都在学的热门技术
		
原文持续更新完善:https://www.cnblogs.com/uncleyong/p/15475614.html 前言:当前的热门主流技术是哪些?测开为啥那么火?90%以上的测试对测开认识不准确 ...
 - 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能测试场景设计
		
说明: 本文是基于虚拟机环境配置设计的 性能测试需求 总tps≥100 每个业务的rt<500ms 持续稳定跑50万业务量 单场景 目的:找到单场景的性能问题,为容量场景提供参考,如果低于容量场 ...
 - 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能监控、分析、调优等
		
说明: 本文是基于虚拟机演示的,资源有限 skywalking中拓扑图 kubectl get po -A -owide 测试执行:单场景 查询礼品 jmeter -n -t gift.jmx -l ...
 - Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。
		
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
 
随机推荐
- Adaptive AUTOSAR 学习笔记 8 - 干货小结:背景、技术、特征、架构、方法论和 Manifest
			
官方文档下载方式及介绍情参见 Adaptive AUTOSAR 学习笔记 2 - 官方文档下载及阅读建议. 这是 Adaptive AUTOSAR 学习笔记的第 8 篇,学习笔记 3 - 7 翻译了 ...
 - 微信小程序云开发-云函数-数据库和云函数获取数据的区别
			
一.数据库获取数据 1.1 数据库获取数据的写法 在本地创建的页面js文件中写代码 1.2 数据库获取数据返回数据限制20条 数据库获取数据,每次返回20条数据(数据库有108条数据) 1.3 数据库 ...
 - LCT(Link-Cut-Tree)
			
LCT(Link-Cut-Tree) LCT维护一个森林,即把每个节点用splay维护,可以进行许多操作: 查询.修改链上的信息 随意指定原树的根(即换根) 动态连边.删边 合并两棵树.分离一棵树 动 ...
 - redis的过期删除策略
			
一.redis的三种过期策略 1.定时删除在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除优点:保证内存被尽快释放缺点:1)若过期key很多, ...
 - 深入刨析tomcat 之---第8篇  how tomcat works 第11章 11.9应用程序,自定义Filter,及注册
			
writed by 张艳涛, 标签:全网独一份, 自定义一个Filter 起因:在学习深入刨析tomcat的学习中,第11章,说了调用过滤链的原理,但没有给出实例来,自己经过分析,给出来了一个Filt ...
 - a = input(a, yymmdd10.)引发的问题
			
在数据清理过程中,经常会遇到以文本储存的日期型数据,这种数据不能直接进行分析,需要先将其转化为以数值存储的格式. 首先准备数据集: data data1; input a :$10. b :$10. ...
 - tp3常量
			
__MODULE__ __CONTROLLER__
 - Android 帧动画使用
			
帧动画 使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画.也可以比喻为像一卷胶卷一样按顺序播放. 播放起来,有点像在看gif图. 本文介绍使用AnimationD ...
 - RHCSA_DAY03
			
cd 切换工作目录命令 cd(英文全拼:change directory)切换目录 命令格式:cd [-选项] [目录名] 提示:目录名称可以是绝对路径或相对路径,如果不指定目录名称,则切换到当前用户 ...
 - Windows API 进程相关笔记
			
0. 前言 最近做了一个进程信息相关的项目,整理了一下自己做项目时的笔记,分享给大家 1. 相关概念 1.1 HANDLE 概念 HANDLE(句柄)是Windows操作系统中的一个概念. 在Wind ...