DAPP的底层区块链开发平台,就像手机的iOS和Android系统一样,是各种DAPP的潜在生态环境。DApp是源自底层区块链平台生态的各种分布式应用程序,也是区块链世界中的基本服务提供商。Dapp在区块链中,就像应用程序在iOS和Android中一样。
dapps/0599a6100280df0d296653e89177b9011304d971fb98aba3edcc5b937c4183fb/
☆--块链。db//app数据库文件与主链中的数据分开存储
☆--配置。json//应用程序的节点配置文件目前主要用于配置受托方的密钥
☆-合同/合同目录
│L——域的实现代码。js//域名合同
☆--短小精悍。json//用于注册dapp的图元文件
☆-开端json//Genesis块
☆--初始化。js//应用程序初始化代码,可用于某些设置、事件注册等
☆-interface//查询接口的实现目录
│☆--域的实现。js//域名查询接口
│└──你好世界.js
☆--logs//日志目录
基于worker模板创建一个基础项目:dotnet new worker -n MassTransit.Demo
打开项目,添加NuGet包:MassTransit
定义订单创建事件消息契约:
using System;
namespace MassTransit.Demo
{
public record OrderCreatedEvent
{
public Guid OrderId { get; set; }
}
}
复制
修改Worker类,发送订单创建事件:
namespace MassTransit.Demo;
public class Worker : BackgroundService
{
readonly IBus _bus;//注册总线
public Worker(IBus bus)
{
_bus = bus;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//模拟并发送订单创建事件
await _bus.Publish(new OrderCreatedEvent(Guid.NewGuid()), stoppingToken);
await Task.Delay(1000, stoppingToken);
}
}
}
复制
仅需实现IConsumer泛型接口,即可实现消息的订阅:
public class OrderCreatedEventConsumer: IConsumer
{
private readonly ILogger<OrderCreatedEventConsumer> _logger;
public OrderCreatedEventConsumer(ILogger<OrderCreatedEventConsumer> logger)
{
_logger = logger;
}
public Task Consume(ConsumeContext<OrderCreatedEvent> context)
{
_logger.LogInformation($"Received Order:{context.Message.OrderId}");
return Task.CompletedTask;
}
}
复制
注册服务:
using MassTransit;
using MassTransit.Demo;
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
services.AddMassTransit(configurator =>
{
//注册消费者
configurator.AddConsumer<OrderCreatedEventConsumer>();
//使用基于内存的消息路由传输
configurator.UsingInMemory((context, cfg) =>
{
cfg.ConfigureEndpoints(context);
});
});
})
.Build();
await host.RunAsync();
复制
运行项目,一个简单的进程内事件发布订阅的应用就完成了。
如果需要使用RabbitMQ 消息代理进行消息传输,则仅需安装MassTransit.RabbitMQNuGet包,然后指定使用RabbitMQ 传输消息即可。
using MassTransit;
using MassTransit.Demo;
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
services.AddMassTransit(configurator =>
{
configurator.AddConsumer<OrderCreatedEventConsumer>();
// configurator.UsingInMemory((context, cfg) =>
// {
// cfg.ConfigureEndpoints(context);
// });
configurator.UsingRabbitMq((context, cfg) =>
{
cfg.Host(
host: "localhost",
port: 5672,
virtualHost: "/",
configure: hostConfig =>
{
hostConfig.Username("guest");
hostConfig.Password("guest");
});
cfg.ConfigureEndpoints(context);
});
});
})
.Build();
await host.RunAsync();