D10092 - Micro Stream, Consumer T Mode to Terminator

This chapter we’ll focus on Dynamic types with java data.

1. Services

Demo Projects and environment

Http Port Ipc Port Ipc Service Name Project Role
6100 up-athena Api Gateway
6301 6311 ipc-epimetheus up-epimetheus Originator
6501 6511 ipc-hecate up-hecate Terminator

2. Source Code

2.1. DynamicApi ( service: up-epimetheus )

package up.god.micro.worker;

import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.EndPoint;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

public interface DynamicApi {
    String sayEnvelop(@PathParam("name") String name);

Here for normalizing the parameters we add additional Actor class to this demo, also the reader could go back to check non-interface programming style.

2.2. DynamicActor ( service: up-epimetheus )

package up.god.micro.worker;

public class DynamicActor implements DynamicApi {
    public String sayEnvelop(final String name) {
        return name;

2.3. DynamicWorker ( service: up-epimetheus )

package up.god.micro.worker;

import io.vertx.core.json.JsonObject;
import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.Ipc;
import io.vertx.up.annotations.Queue;

public class DynamicWorker {

    @Ipc(to = "RPC://IPC/NODE/DYNAMIC1", name = "ipc-hecate")
    public JsonObject sayDynamic(final String name) {
        return new JsonObject()
                .put("name", name)
                .put("originator", "ipc-epimetheus");

2.4. DynamicInsider ( service: up-hecate )

package up.god.ipc;

import io.vertx.core.json.JsonObject;
import io.vertx.up.annotations.Ipc;
import io.vertx.up.commune.Envelop;

public class DynamicInsider {

    public JsonObject sayDyanmic(final Envelop envelop) {
        final JsonObject data = envelop.data();
        return data.put("terminator", "ipc-hecate")
                .put("type", "dynamic");

3. Testing

After you have started above three services, you can test this demo:

URL : http://localhost:6100/api/ipc/stream/dynamic1/huan1

Method : GET

Response :

    "data": {
        "name": "huan1",
        "originator": "ipc-epimetheus",
        "terminator": "ipc-hecate",
        "type": "dynamic"

4. Summary

This chapter consumer method signature is more freedom as following:

public JsonObject sayDynamic(final String name)

You can use primary type in worker and write any codes here.