apache / celix

Apache Celix is a framework for C and C++14 to develop dynamic modular software applications using component and in-process service-oriented programming.
https://celix.apache.org/
Apache License 2.0
170 stars 89 forks source link

How to arrange the priority of services in RSA #776

Open xuzhenbao opened 1 month ago

xuzhenbao commented 1 month ago

This issue is used to discuss the following issues: If there are multiple remote service instances and local service instances that match the requirements, how to arrange these service instances so that users can select the best service instance.

Currently, I plan to solve this problem based on the following two points:

  1. If there are multiple Remote Service Admin Service instances, how to facilitate users to select the best remote service?

    If there are multiple Remote Service Admin Service instances in the same framework instance, the topology manager selects the best Remote Service Admin Service for importing services based on the Service Ranking Order, the same service (with the same endpoint.service.id and endpoint.framework.uuid property values) is only imported by the best Remote Service Admin Service.

  2. If there are local service instances and remote service instances that match the requirements at the same time in the same framework instance, how to facilitate users to prefer to use local services or remote services?

    To solve this problem, I plan to add a conan option remote_service_ranking_weight to specify the priority weight of remote services. When importing services, the topology manager sets the 'service.ranking' property of the remote service to remote service ranking weight + service.ranking. If remote service ranking weight is a negative number, the priority of local services is higher, otherwise the priority of remote services is higher.

pnoltes commented 1 month ago

Hi,

For 1. I agree with the approach; Use the RSA service ranking.

For 2. I would prefer a small adjustment: Instead of a conan option, use a config property based on the RSA name. Something like CELIX_RSA_MYRSA_IMPORT_SERVICE_RANKING_OFFSET and use the (negative or positive) value to adjust the provided export service ranking. I prefer something like offset of weight, because weight for me implies multiplication not addition/subtraction.