MASSTRANSITRABBITMQ有时会获得超时例外,有时会检索数据

问题描述 投票:0回答:1
public async Task<PaginatedResponse<CompanyTeacherDetailDto>> GetAllCompanyTeachersAsync(string companyId, int skip, int take) { var response = await _teacherRequest.GetResponse<PaginatedResponse<GetAllCompanyTeacherDataResponse>>(new GetAllCompanyTeacherDataRequest { CompanyId = companyId, PageIndex = skip, PageSize = take }); var teachers = response.Message.Items .Select(teacher => new CompanyTeacherDetailDto { Name = teacher.Name, Surname = teacher.Surname, Email = teacher.Email, Phone = teacher.Phone }) .ToList(); return new PaginatedResponse<CompanyTeacherDetailDto>(teachers, response.Message.TotalCount); }
这是我获得公司老师的方法。下面是我在上述代码中使用的消费者:

public async Task Consume(ConsumeContext<GetAllCompanyTeacherDataRequest> context) { var companyId = Guid.Parse(context.Message.CompanyId); var query = _context.CompanyEmployees .Where(ce => ce.CompanyId == companyId && ce.InviteStatus == InviteStatus.Accept); var total = await query.CountAsync(); bool hasPaging = context.Message.PageIndex.HasValue && context.Message.PageSize.HasValue; if (hasPaging) { query = query .Skip(context.Message.PageIndex!.Value * context.Message.PageSize!.Value) .Take(context.Message.PageSize.Value); } var teacherIds = await query .Select(ce => ce.EmployeeId) .Distinct() .ToListAsync(); var usersResponse = await _request.GetResponse<GetUsersInformationFromCompanyResponse>( new GetUsersInformationFromCompanyRequest { UserIds = teacherIds } ); var teachers = usersResponse.Message.Users .Select(user => new GetAllCompanyTeacherDataResponse { Name = user.FirstName, Surname = user.LastName, Email = user.Email, Phone = user.PhoneNumber }) .ToList(); if (hasPaging) { await context.RespondAsync(new PaginatedResponse<GetAllCompanyTeacherDataResponse>(teachers, total)); } else { await context.RespondAsync(teachers); } }

我使用Swagger发送了5次请求。 4次获取超时错误,1次检索数据。我调试了它,发现当它返回超时误误消费者时,未调用。我没有更改任何代码行,然后再调试,这次获取数据。为什么这样工作?为什么有时会返回,但有时会获得超时例外? 我正确地完成了所有配置,但找不到任何解决方案。数据库中没有太多数据。如何解决这个问题?该问题的主要原因是什么?
    

只是想提供有关此问题的更新。看来问题已经解决了,我相信我明白了为什么。在调试时,我注意到有时会触发消费者,有时不是。这是我认为正在发生的事情:
c# .net rabbitmq microservices masstransit
1个回答
0
投票
我们的微服务项目还没有生产,每个人都从Github克隆了存储库并在本地运行它。但是,RabbitMQ在云中运行。当多个开发人员同时运行该项目时,该服务的多个实例正在连接到同一RabbitMQ队列。这引起了一些意外的行为

当我关闭所有其他游戏机并仅运行我的实例时,问题就消失了,消费者每次都开始始终如一地工作。这使我认为根本原因是同时与同一队列相连的实例太多。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.