nope/CHANGELOG.md

4.6 KiB

1.0.0

0.9.7.2

  • Add a parameter for the runNopeBackend-cli to select the default service provider selection method.
  • Add a parameter for the runNopeBackend-cli to force using service provider selection everytime.
  • Use check the selector during instance creation only, if there exists a specification.
    • to prevent endless loops, the function performCall of the dispatcher now adds the option preventSelector
  • fixing nodejs related observable issue.
  • time-options for the dispatcher are now partial.

0.9.7.1

  • If the Channel "event" is selected the "force-emitting" is enabled

0.9.7

  • Adding a selector-function to select a specific executor on service-calls. This is only performed if there are multipe providers for a service

    • creating an instance is althoug a service

    • To provide a specific selector use the following options at the performCall-method of the dispatcher:

      const instance = await dispatcher.generateInstance(
        {
          identifier: "instance01",
          type: package_01.providedClasses[0].description.name,
          params: [],
        }, // Now we are able to provide a specific selector:
        {
          selector: "dispatcher", // <= This is new
        }
      );
      

      Instead of providing a function, the selector can be assigned to the following values. These values insert a default functionality:

      Value Description
      dispatcher Tries to execute the service on the requesting dispatcher
      first Tries to execute the service on the first dispatcher which replied to the request
      host Tries to execute the service on a random dispatcher found on the same host
      cpu-usage Tries to execute the service on the dispatcher with the minimal used cpu. To compare the elements the selection considers the available Cores as well
      free-ram Tries to execute the service on the dispatcher which has free ram

      To define a custom policy, provide the function as follows: (dispatcherId: string, options?: { last?: boolean, initalTest?: boolean }) => Promise<boolean>

      The first parameter receives the responding dispatcher-id the second contains additional flags, which might be used during the selection process:

      Position Parameter Description
      0 dispatcherId Tries to execute the service on the requesting dispatcher
      1 options optional : additional parameter with options

      The Parameter options contains the following parameters:

      Parameter Description
      last shows that the last dispatcher is being checked.
      initalTest shows a flag, that the function is just tested. This is important if you want to check all dispatchers and compare them later etc.
  • Adapting Dispatcher:

    • Adding/Adapted the Functions unregisterCallback. This callback allows to unregister callbacks that are given in a rpc-call. See the Example below:

      // Add the Example Here
      

      Therefore the communication-layers and mirros have to implement additional events ().

    • Adding/Adapted the Functions instanceExists, publisherExists and subscriptionExists. These functions allows to check whether the instance / publisher / subscriber exists for the given identifier or topic

    • Added getInstanceInfo, a function, which will return the instance description and the corresponding dispatcher.

    • Added getDispatcherForInstance, a function, which will return the matching dispatcher of the instance.

    • Creating Instances: Now the Dispatcher tests, if there is allready an instance with this name and type. If the type miss matches, an error is thrown. Otherwise the dispatcher tries to adapt the selector-function.

    • Adapted the IDispatcherInfo message:

      export interface IDispatcherInfo {
        id: string;
        timestamp: number;
        status: ENopeDispatcherStatus;
        env: string;
        version: string;
        host: {
          cores: number;
          cpu: {
            // Name of the CPU as String
            model: string;
            // Speed of the CPU in MHz
            speed: number;
            // Usage of the CPU in %. If not present ==> -1
            usage: number;
          };
          os: string;
          ram: {
            // Amount of free RAM in MByte
            free: number;
            // Amount of free RAM in MByte
            total: number;
            // Used RAM in %
            usedPerc: number;
          };
        };
        pid: number | string;
      }
      

0.9.6

  • Adding MQTT as Communication-Layer.
  • Fixing getIdentifierOf at BaseModule.