Hầu hết các API trung gian đều trả về một đối tượng SdvResult. Khi thành công, đối tượng này sẽ chứa đối tượng kết quả dự kiến. Khi không thành công, đối tượng này sẽ chứa một đối tượng SdvStatus, cho biết một hành vi hoặc điều kiện lỗi không mong muốn, thường được xác định bằng một mã lỗi, chẳng hạn như Internal, Unavailable hoặc DataLoss.
Trang này giúp bạn khắc phục các mã lỗi này.
Khắc phục sự cố đăng ký và tạo
Lỗi đăng ký và tạo thường xảy ra khi bạn đang cố gắng tạo hoặc đăng ký một dịch vụ không hợp lệ.
Không thể tạo dịch vụ thứ hai
Lỗi:
Internal lỗi.
Nguyên nhân:
Bạn đang cố gắng đăng ký chính xác cùng một phiên bản gói dịch vụ (tên và mã nhận dạng phiên bản) hai lần.
Cách khắc phục:
Đừng cố gắng đăng ký chính xác cùng một phiên bản gói dịch vụ (tên và mã nhận dạng phiên bản) hai lần.
Không thể xoá gói dịch vụ trùng lặp
Lỗi:
Status(-3, EX_ILLEGAL_ARGUMENT)
Nguyên nhân:
Bạn đang cố gắng xoá một gói dịch vụ trùng lặp không tồn tại.
Cách khắc phục:
Đừng cố gắng xoá một gói dịch vụ trùng lặp không tồn tại.
Không thể truy xuất một phiên bản nhà xuất bản để gửi thông báo
Lỗi:
Lệnh gọi đến take_publisher() trả về none.
Nguyên nhân:
Bạn đã gọi take_publisher() hai lần cho cùng một biến thể từ cùng một phiên bản gói dịch vụ.
Cách khắc phục:
Đừng gọi take_publisher() hai lần cho cùng một biến thể từ cùng một thực thể gói dịch vụ.
Không thể tạo Subscriber, Observer, History hoặc InstantReader
Lỗi:
Unavailable lỗi.
Nguyên nhân:
Bạn đã cố gắng tạo Subscriber, Observer, History hoặc InstantReader cho một nhà xuất bản không tồn tại hoặc đã bị huỷ đăng ký.
Cách khắc phục:
Xác minh rằng nhà xuất bản tồn tại hoặc đã đăng ký trước khi cố gắng tạo Subscriber, Observer, History hoặc InstantReader cho nhà xuất bản.
Không thể tạo ứng dụng RPC
Lỗi:
Unavailable lỗi
Nguyên nhân:
Bạn đã cố gắng tạo một ứng dụng RPC cho tên đơn vị máy chủ không tồn tại hoặc chưa được đăng ký.
Cách khắc phục:
Xác minh rằng máy chủ tồn tại và đã được đăng ký trước khi tạo ứng dụng RPC.
Khắc phục lỗi giao tiếp
Lỗi giao tiếp có thể xảy ra sau khi một dịch vụ đã thực thi và bắt đầu giao tiếp với các dịch vụ khác.
Khắc phục sự cố về việc huỷ đăng ký nhà xuất bản
Lỗi có thể xảy ra khi nhà xuất bản huỷ đăng ký trong khi độc giả vẫn đang hoạt động.
read_next_messages() của người đăng ký trả về danh sách trống
Lỗi:
read_next_messages() thành công nhưng trả về danh sách trống.
Nguyên nhân:
Nhà xuất bản bị huỷ đăng ký trong khi người đọc vẫn đang hoạt động.
Cách khắc phục:
Sử dụng một đối tượng thuê bao hoặc đối tượng trong nhật ký có luồng dữ liệu về tính sẵn có. Nếu không có thông báo cuối cùng của luồng dữ liệu về tình trạng còn hàng, thì nhà xuất bản sẽ bị huỷ đăng ký và không có thông báo mới.
next() của Observer trả về lỗi nội bộ
Lỗi:
next() trả về lỗi Internal.
Nguyên nhân:
Nhà xuất bản bị huỷ đăng ký trong khi người đọc vẫn đang hoạt động.
Cách khắc phục:
Sử dụng một đối tượng đăng ký hoặc nhật ký có luồng trạng thái còn hàng. Nếu thông báo cuối cùng của luồng trạng thái còn hàng không có sẵn, thì nhà xuất bản đã ngừng hoạt động và không có thông báo mới.
read_from_history() của History không trả về tin nhắn mới
Lỗi:
read_from_history() không trả về bất kỳ thư mới nào; chỉ trả về các thư cũ hơn.
Nguyên nhân:
Nhà xuất bản bị huỷ đăng ký trong khi người đọc vẫn đang hoạt động.
Cách khắc phục:
Sử dụng một đối tượng đăng ký hoặc nhật ký có luồng trạng thái còn hàng. Nếu thông báo cuối cùng của luồng trạng thái còn hàng không có sẵn, thì nhà xuất bản đã ngừng hoạt động và không có thông báo mới.
InstantReader read_latest_message() trả về lỗi nội bộ
Lỗi:
read_latest_message() trả về lỗi Internal.
Nguyên nhân:
Nhà xuất bản bị huỷ đăng ký trong khi người đọc vẫn đang hoạt động.
Cách khắc phục:
Sử dụng một đối tượng đăng ký hoặc nhật ký có luồng trạng thái còn hàng. Nếu thông báo cuối cùng của luồng trạng thái còn hàng không có sẵn, thì nhà xuất bản đã ngừng hoạt động và không có thông báo mới.
Khắc phục sự cố hàng đợi tin nhắn trống
Lỗi có thể xảy ra khi cố gắng đọc từ một hàng đợi tin nhắn trống.
read_next_messages() của người đăng ký trả về một danh sách trống
Lỗi:
read_next_messages() trả về danh sách trống thành công.
Nguyên nhân:
Nhà xuất bản đang hoạt động nhưng chưa gửi tin nhắn.
Cách khắc phục:
Sử dụng một đối tượng thuê bao hoặc đối tượng trong nhật ký có luồng dữ liệu về tính sẵn có. Nếu có thông báo cuối cùng của luồng trạng thái sẵn sàng, thì nhà xuất bản đang hoạt động và không có thông báo mới.
next() của Observer trả về lỗi nội bộ
Lỗi:
next() trả về lỗi Internal.
Nguyên nhân:
Nhà xuất bản đang hoạt động nhưng chưa gửi tin nhắn.
Cách khắc phục:
Sử dụng một đối tượng thuê bao hoặc đối tượng trong nhật ký có luồng dữ liệu về tính sẵn có. Nếu có thông báo cuối cùng của luồng trạng thái sẵn sàng, thì nhà xuất bản đang hoạt động và không có thông báo mới.
read_from_history() của History không trả về tin nhắn mới
Lỗi:
read_from_history() trả về danh sách trống thành công.
Nguyên nhân:
Nhà xuất bản đang hoạt động nhưng chưa gửi tin nhắn.
Cách khắc phục:
Sử dụng một đối tượng thuê bao hoặc đối tượng trong nhật ký có luồng dữ liệu về tính sẵn có. Nếu có thông báo cuối cùng của luồng trạng thái sẵn sàng, thì nhà xuất bản đang hoạt động và không có thông báo mới.
InstantReader read_latest_message() trả về lỗi nội bộ
Lỗi:
read_latest_message() trả về lỗi Internal.
Nguyên nhân:
Nhà xuất bản đang hoạt động nhưng chưa gửi tin nhắn.
Cách khắc phục:
Sử dụng một đối tượng thuê bao hoặc đối tượng trong nhật ký có luồng dữ liệu về tính sẵn có. Nếu có thông báo cuối cùng của luồng trạng thái sẵn sàng, thì nhà xuất bản đang hoạt động và không có thông báo mới.
Khắc phục sự cố tràn bộ nhớ đệm hoặc mất dữ liệu
Lỗi có thể xảy ra khi nhà xuất bản gửi thông báo với tốc độ nhanh hơn tốc độ mà một trình đọc có thể xử lý.
Lần đọc đầu tiên của người đăng ký sau khi tràn sẽ trả về lỗi DataLoss
Lỗi:
read_next_message() trả về lỗi DataLoss.
Nguyên nhân:
Nhà xuất bản gửi thông báo với tốc độ nhanh hơn tốc độ mà người đọc có thể xử lý.
Cách khắc phục:
next() đầu tiên của Observer sau khi xảy ra lỗi tràn sẽ trả về lỗi DataLoss
Lỗi:
next() trả về lỗi DataLoss.
Nguyên nhân:
Nhà xuất bản gửi thông báo với tốc độ nhanh hơn tốc độ mà người đọc có thể xử lý.
Khắc phục: Các giải pháp khắc phục tiềm năng là:
Nhà xuất bản xuất bản với tốc độ chậm hơn. Ví dụ: bạn có thể có một biến có dấu thời gian của thông báo mới nhất. Nếu thời gian hiện tại nhỏ hơn thời gian xuất bản mới nhất cộng với một khoảng thời gian, bạn sẽ không xuất bản thông báo. Bằng cách sử dụng cơ chế này, tối đa một thông báo cho mỗi delta sẽ được xuất bản.
Người dùng sử dụng đối tượng
InstantReadthay vì đối tượng theo dõi. Đối tượngInstantReadkhông trả về lỗi tràn và luôn trả về thông báo cuối cùng. Nếu chỉ có tin nhắn gần đây nhất là quan trọng đối với bạn, thì bạn có thể dùng một đối tượngInstantReadthay vì một đối tượng theo dõi.Người tiêu dùng triển khai việc lấy mẫu. Nếu giải pháp của bạn có một nhà xuất bản (P1) xuất bản thông báo nhanh hơn so với tốc độ mà người quan sát (01) có thể đọc, thì bạn có thể tạo một nhà xuất bản (P2) và người quan sát (02) mới để điều chỉnh sự khác biệt về tốc độ xuất bản và đọc.
Ví dụ: giả sử P1 xuất bản một thông báo sau mỗi 10 mili giây, nhưng O1 chỉ có thể đọc một thông báo sau mỗi 100 mili giây và loại bỏ 9 thông báo còn lại. Để giải quyết sự khác biệt này, hãy tạo một giải pháp theo các bước sau:
- P1 xuất bản thông báo cho O2.
- O2 đọc một thông báo và bỏ qua chín thông báo.
- O2 gửi một thông báo đã đọc đến P2.
- P2 gửi một tin nhắn đã đọc đến O1.
- O1 đọc một thông báo sau mỗi 10 giây.
Đoạn mã ví dụ sau đây cho biết cách triển khai tình huống lấy mẫu này:
int discarded_message = 10; while (true) { message m = O2.read_message(); if discarded_message == 10 { discarded_message = 0; P2.publish(m); } else { discarded_message ++; } }
Nhật ký đọc chưa hoàn chỉnh
Lỗi:
Tin nhắn bị mất trước khi sao chép nhật ký. Không có thông báo lỗi trực tiếp khi đọc.
Nguyên nhân:
Nhà xuất bản gửi thông báo với tốc độ nhanh hơn tốc độ mà người đọc có thể xử lý.
Cách khắc phục:
InstantReader chỉ đọc tin nhắn gần đây nhất
Lỗi:
Tin nhắn bị mất trước khi sao chép nhật ký. Không có thông báo lỗi trực tiếp khi đọc.
Nguyên nhân:
Nhà xuất bản gửi thông báo với tốc độ nhanh hơn tốc độ mà người đọc có thể xử lý.
Cách khắc phục:
Không áp dụng
Ứng dụng RPC gọi một phương thức và phương thức đó không có sẵn
Lỗi:
Lệnh gọi phương thức không thành công do lỗi Unavailable.
Nguyên nhân:
SDV không biết tên máy chủ và trả về Unavailable. Lỗi này được trả về bởi phần mềm trung gian nếu tính năng khám phá dịch vụ không trả về tên máy chủ hợp lệ.
Cách khắc phục:
Khởi động một gói dịch vụ xác định server cho giao diện đã cho mà ứng dụng muốn sử dụng.
Việc triển khai phía máy chủ trả về lỗi SdvStatus
Lỗi:
Việc triển khai phía máy chủ sẽ trả về một SdvResult chứa lỗi SdvStatus, chẳng hạn như SdvStatusCode::NotFound. Lỗi được truyền ngược lại cho ứng dụng khách gọi.
Nguyên nhân:
SDV và hệ thống giao tiếp giữa ứng dụng và máy chủ hoạt động như dự kiến, nhưng ứng dụng đã đưa ra yêu cầu kích hoạt lỗi trong máy chủ.
Cách khắc phục:
Đưa ra một yêu cầu hợp lệ bằng máy khách hoặc sửa máy chủ để phản hồi thành công những yêu cầu đó.