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);
}
}
只是想提供有关此问题的更新。看来问题已经解决了,我相信我明白了为什么。在调试时,我注意到有时会触发消费者,有时不是。这是我认为正在发生的事情:
当我关闭所有其他游戏机并仅运行我的实例时,问题就消失了,消费者每次都开始始终如一地工作。这使我认为根本原因是同时与同一队列相连的实例太多。