我正在使用消耗Kafka消息的工作程序服务。 我想在检索到消息时创建一个signalR事件,但目前无法使其正常工作。
public static async Task Main(string[] args)
{
using (var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
services.AddTransient<IKafkaClient, KafkaClient>();
services.AddSignalR();
})
.Build())
{
// Start the host
await host.StartAsync();
// Wait for the host to shutdown
await host.WaitForShutdownAsync();
}
}
以及我的员工服务
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IKafkaClient _kafkaClient;
private readonly IHubContext<NotificationHub> _notificationHub;
public Worker(ILogger<Worker> logger,
IKafkaClient kafkaClient,
IHubContext<NotificationHub> notificationHub)
{
_logger = logger;
_kafkaClient = kafkaClient;
_notificationHub = notificationHub;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// code here
}
}
答案 0 :(得分:0)
在您的启动password_field.send_keys(password)
{'text': "".join(keys_to_typing(value)),
for i in range(len(val)):
TypeError: object of type 'NoneType' has no len()
方法上,添加:
AddAdditionalServices
然后将其注入您的工作者类中,例如:
services.AddSingleton<NotificationHub>()
您需要创建从类中调用的中心方法,例如:
private readonly IServiceProvider serviceProvider;
private NotificationHub NotificationHub
{
get
{
return this.serviceProvider.GetRequiredService<NotificationsHub>();
}
}
因此您可以在工作程序中调用它。
public async Task BroadcastMessage(string message){
// your code here
}
答案 1 :(得分:-1)
我通过在我的backgroundservice的ExecuteAsync方法中添加Task.Yield()解决了我的问题。