ื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ืžืงื•ืจื™ื•ืช ื‘ืขื ืŸ ื‘ืคืœื˜ืคื•ืจืžืช Red Hat OpenShift ื‘ืืžืฆืขื•ืช Quarkus ื•-AMQ Online

ืฉืœื•ื ืœื›ื•ืœื! ื”ื ื” ื–ื” - ื”ืคื•ืกื˜ ื”ืื—ืจื•ืŸ ืฉืœื ื• ื‘ืกื“ืจืช Quarkus! (ืื’ื‘, ืฆืคื• ื‘ืกืžื™ื ืจ ื”ืžืงื•ื•ืŸ ืฉืœื ื• "ื–ื”ื• Quarkus - ืžืกื’ืจืช Java ืžืงื•ืจื™ืช ืฉืœ Kubernetes". ื ืจืื” ืœืš ืื™ืš ืœื”ืชื—ื™ืœ ืžืืคืก ืื• ืœื”ืขื‘ื™ืจ ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื)

ื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ืžืงื•ืจื™ื•ืช ื‘ืขื ืŸ ื‘ืคืœื˜ืคื•ืจืžืช Red Hat OpenShift ื‘ืืžืฆืขื•ืช Quarkus ื•-AMQ Online

ะ’ ืงื•ื“ื ื‘ืคื•ืกื˜ ื–ื”, ื‘ื“ืงื ื• ืืช ื”ื›ืœื™ื ื”ืจืœื•ื•ื ื˜ื™ื™ื ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื›ื“ื™ ืœื›ืžืช ืืช ื”ืฉื™ืคื•ืจื™ื ืฉื”ื•ืฉื’ื• ื›ืชื•ืฆืื” ืžืžื•ื“ืจื ื™ื–ืฆื™ื” ืฉืœ ื™ื™ืฉื•ืžื™ Java.

ืžืื– ื’ืจืกื” 0.17.0, ืงื•ื•ืจืงื•ืก ืชื•ืžืš ื‘ืฉื™ืžื•ืฉ ื‘-Advanced Message Queuing Protocol (AMQP), ืฉื”ื•ื ืชืงืŸ ืคืชื•ื— ืœื”ืขื‘ืจืช ืžืกืจื™ื ืขืกืงื™ื™ื ื‘ื™ืŸ ืืคืœื™ืงืฆื™ื•ืช ืื• ืืจื’ื•ื ื™ื.

Red Hat AMQ Online ื”ื•ื ืฉื™ืจื•ืช ืฉื ื‘ื ื” ืขืœ ื‘ืกื™ืก ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื— EnMase ื•ื”ื˜ืžืขืช ืžื ื’ื ื•ืŸ ืžืกืจื™ื ืžื‘ื•ืกืก ืคืœื˜ืคื•ืจืžื” ืจื“ ื”ืื˜. ืœืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ืื™ืš ื–ื” ืขื•ื‘ื“, ืจืื” ื›ืืŸ (EN). ื”ื™ื•ื ื ืจืื” ืœื›ื ื›ื™ืฆื“ ืœืฉืœื‘ ื‘ื™ืŸ AMQ Online ื•-Quarkus ืœื‘ื ื™ื™ืช ืžืขืจื›ืช ื”ื•ื“ืขื•ืช ืžื•ื“ืจื ื™ืช ืžื‘ื•ืกืกืช OpenShift ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืฉืชื™ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ื•ื“ืขื•ืช ื—ื“ืฉื•ืช.

ื”ื”ื ื—ื” ื”ื™ื ืฉื›ื‘ืจ ืคืจืกืช ืืช AMQ Online ื‘ืคืœื˜ืคื•ืจืžืช OpenShift (ืื ืœื, ืื– ืจืื” ืžื“ืจื™ืš ื”ืชืงื ื”).

ื›ื“ื™ ืœื”ืชื—ื™ืœ, ื ื™ืฆื•ืจ ืืคืœื™ืงืฆื™ื™ืช Quarkus ืฉืชื”ื•ื•ื” ืžืขืจื›ืช ืคืฉื•ื˜ื” ืœืขื™ื‘ื•ื“ ื”ื–ืžื ื•ืช ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื”ื•ื“ืขื•ืช ืชื’ื•ื‘ืชื™ื•ืช. ืืคืœื™ืงืฆื™ื” ื–ื• ืชื›ืœื•ืœ ืžื—ื•ืœืœ ื”ื–ืžื ื•ืช ืฉืฉื•ืœื— ื”ื–ืžื ื•ืช ืœืชื•ืจ ื”ื•ื“ืขื•ืช ื‘ืžืจื•ื•ื— ืงื‘ื•ืข ื•ื›ืŸ ืžืขื‘ื“ ื”ื–ืžื ื•ืช ืฉื™ืขื‘ื“ ื”ื•ื“ืขื•ืช ืžื”ืชื•ืจ ื•ื™ืคื™ืง ืื™ืฉื•ืจื™ื ื”ื ื™ืชื ื™ื ืœืฆืคื™ื™ื” ื‘ื“ืคื“ืคืŸ.

ืœืื—ืจ ืฉื™ืฆืจื ื• ืืช ื”ืืคืœื™ืงืฆื™ื”, ื ืจืื” ืœืš ื›ื™ืฆื“ ืœื”ื˜ืžื™ืข ืืช ืชืฆื•ืจืช ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช ื‘ืืคืœื™ืงืฆื™ื” ื•ืœื”ืฉืชืžืฉ ื‘-AMQ Online ื›ื“ื™ ืœืกืคืง ืืช ื”ืžืฉืื‘ื™ื ื”ื“ืจื•ืฉื™ื ืœื ื• ื‘ืžืขืจื›ืช.

ืืคืœื™ืงืฆื™ื™ืช Quarkus

ืืคืœื™ืงืฆื™ื™ืช Quarkus ืฉืœื ื• ืคื•ืขืœืช ืขืœ OpenShift ื•ื”ื™ื ื’ืจืกื” ืฉื•ื ื” ืฉืœ ื”ืชื•ื›ื ื™ืช amqp-quickstart. ื ื™ืชืŸ ืœืžืฆื•ื ื“ื•ื’ืžื” ืžืœืื” ืฉืœ ืฆื“ ื”ืœืงื•ื— ื›ืืŸ.

ื”ื–ืžื ื” ืžื—ื•ืœืœ

ื”ืžื—ื•ืœืœ ืคืฉื•ื˜ ืฉื•ืœื— ื‘ืื•ืคืŸ ืžื•ื ื•ื˜ื•ื ื™ ืžื–ื”ื™ ื”ื–ืžื ื•ืช ื’ื“ืœื•ืช ืœื›ืชื•ื‘ืช "ื”ื”ื–ืžื ื•ืช" ื›ืœ 5 ืฉื ื™ื•ืช.

@ApplicationScoped
public class OrderGenerator {
 
    private int orderId = 1;
 
    @Outgoing("orders")
    public Flowable<Integer> generate() {
        return Flowable.interval(5, TimeUnit.SECONDS)
        .map(tick -> orderId++);
    }
}

ืžืขื‘ื“ ื”ื–ืžื ื•ืช

ืžื˜ืคืœ ื”ื”ื–ืžื ื•ืช ื”ื•ื ืืคื™ืœื• ื™ื•ืชืจ ืคืฉื•ื˜, ื”ื•ื ืจืง ืžื—ื–ื™ืจ ืžื–ื”ื” ืื™ืฉื•ืจ ืœื›ืชื•ื‘ืช ื”"ืื™ืฉื•ืจื™ื".

@ApplicationScoped
public class OrderProcessor {
    @Incoming("orders")
    @Outgoing("confirmations")
    public Integer process(Integer order) {
        // ะ˜ะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธั ั€ะฐะฒะตะฝ ัƒะดะฒะพะตะฝะฝะพะผัƒ ะธะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ัƒ ะทะฐะบะฐะทะฐ <img draggable="false" class="emoji" alt=":-)" src="https://s.w.org/images/core/emoji/11.2.0/svg/1f642.svg">
        return order * 2;
    }
}

ืžืฉืื‘ื™ ืื™ืฉื•ืจ

ืžืฉืื‘ ื”ืื™ืฉื•ืจ ื”ื•ื ื ืงื•ื“ืช ืงืฆื” HTTP ืœืจื™ืฉื•ื ื”ืื™ืฉื•ืจื™ื ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื•.

@Path("/confirmations")
public class ConfirmationResource {
 
    @Inject
    @Stream("confirmations") Publisher<Integer> orders;
 
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello";
    }
 
 
    @GET
    @Path("/stream")
    @Produces(MediaType.SERVER_SENT_EVENTS)
    public Publisher<Integer> stream() {
        return orders;
    }
}

ื”ืชืืžื”

ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœ-AMQ Online, ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืชืฆื˜ืจืš ื›ืžื” ื ืชื•ื ื™ ืชืฆื•ืจื”, ื›ืœื•ืžืจ: ืชืฆื•ืจืช ืžื—ื‘ืจ Quarkus, ืžื™ื“ืข ืขืœ ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ AMQP ื•ืื™ืฉื•ืจื™ ืœืงื•ื—. ืขื“ื™ืฃ, ื›ืžื•ื‘ืŸ, ืœืฉืžื•ืจ ืืช ื›ืœ ื ืชื•ื ื™ ื”ืชืฆื•ืจื” ื‘ืžืงื•ื ืื—ื“, ืื‘ืœ ื ืคืจื™ื“ ืื•ืชื ื‘ื›ื•ื•ื ื” ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืืคืฉืจื•ื™ื•ืช ื”ืืคืฉืจื™ื•ืช ืœื”ื’ื“ืจืช ืืคืœื™ืงืฆื™ื™ืช Quarkus.

ืžื—ื‘ืจื™ื

ื ื™ืชืŸ ืœืกืคืง ืชืฆื•ืจืช ืžื—ื‘ืจ ื‘ื–ืžืŸ ื”ื™ื“ื•ืจ ื‘ืืžืฆืขื•ืช ืงื•ื‘ืฅ ืžืืคื™ื™ื ื™ ื™ื™ืฉื•ื:

mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp

ื›ื“ื™ ืฉื”ื“ื‘ืจื™ื ื™ื”ื™ื• ืคืฉื•ื˜ื™ื, ื ืฉืชืžืฉ ืจืง ื‘ืชื•ืจ ื”ื•ื“ืขื•ืช ืขื‘ื•ืจ ื›ืชื•ื‘ืช ื”"ื”ื–ืžื ื•ืช". ื•ื›ืชื•ื‘ืช ื”"ืื™ืฉื•ืจื™ื" ื‘ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืชืฉืชืžืฉ ื‘ืชื•ืจ ื‘ื–ื™ื›ืจื•ืŸ.

ื ืงื•ื“ืช ืงืฆื” AMQP

ื‘ื–ืžืŸ ื”ืงื•ืžืคื™ืœืฆื™ื”, ืฉื ื”ืžืืจื— ื•ืžืกืคืจ ื”ื™ืฆื™ืื” ืขื‘ื•ืจ ื ืงื•ื“ืช ื”ืงืฆื” AMQP ืื™ื ื ื™ื“ื•ืขื™ื, ื•ืœื›ืŸ ื™ืฉ ืœื”ื–ืจื™ืง ืื•ืชื. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช ื ืงื•ื“ืช ื”ืงืฆื” ื‘-configmap ืฉื ื•ืฆืจื” ืขืœ ื™ื“ื™ AMQ Online, ืื– ื ื’ื“ื™ืจ ืื•ืชื ื‘ืืžืฆืขื•ืช ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ื‘ืžื ื™ืคืกื˜ ื”ืืคืœื™ืงืฆื™ื”:

spec:
  template:
    spec:
      containers:
      - env:
        - name: AMQP_HOST
          valueFrom:
            configMapKeyRef:
              name: quarkus-config
              key: service.host
        - name: AMQP_PORT
          valueFrom:
            configMapKeyRef:
              name: quarkus-config
              key: service.port.amqp

ืื™ืฉื•ืจื™ื

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืืกื™ืžื•ืŸ ื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช ื›ื“ื™ ืœืืžืช ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืœ-OpenShift. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืชื—ื™ืœื” ืขืœื™ืš ืœื™ืฆื•ืจ ConfigSource ืžื•ืชืื ืื™ืฉื™ืช ืฉื™ืงืจื ืืช ืืกื™ืžื•ืŸ ื”ืื™ืžื•ืช ืžืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœ ื”ืคื•ื“:

public class MessagingCredentialsConfigSource implements ConfigSource {
    private static final Set<String> propertyNames;
 
    static {
        propertyNames = new HashSet<>();
        propertyNames.add("amqp-username");
        propertyNames.add("amqp-password");
    }
 
    @Override
    public Set<String> getPropertyNames() {
        return propertyNames;
    }
 
    @Override
    public Map<String, String> getProperties() {
        try {
            Map<String, String> properties = new HashMap<>();
            properties.put("amqp-username", "@@serviceaccount@@");
            properties.put("amqp-password", readTokenFromFile());
            return properties;
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
 
    @Override
    public String getValue(String key) {
        if ("amqp-username".equals(key)) {
            return "@@serviceaccount@@";
        }
        if ("amqp-password".equals(key)) {
            try {
                return readTokenFromFile();
            } catch (IOException e) {
                throw new UncheckedIOException(e);
            }
        }
        return null;
    }
 
    @Override
    public String getName() {
        return "messaging-credentials-config";
    }
 
    private static String readTokenFromFile() throws IOException {
        return new String(Files.readAllBytes(Paths.get("/var/run/secrets/kubernetes.io/serviceaccount/token")), StandardCharsets.UTF_8);
    }
}

ื‘ื ื” ื•ืคืจื™ืกื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื”

ืžื›ื™ื•ื•ืŸ ืฉื”ืืคืœื™ืงืฆื™ื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืžื•ืจื›ื‘ืช ืœืงื•ื‘ืฅ ื”ืคืขืœื”, ื ื“ืจืฉืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช GraalVM. ืœืคืจื˜ื™ื ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ืกื‘ื™ื‘ื” ืขื‘ื•ืจ ื–ื”, ืขื™ื™ืŸ ื‘ื”ื•ืจืื•ืช ื”ืžืชืื™ืžื•ืช ื‘ ืžื“ืจื™ืš ืงื•ื•ืืจืงื•ืก.

ืœืื—ืจ ืžื›ืŸ, ื‘ืขืงื‘ื•ืช ื”ื”ื•ืจืื•ืช ืฉื ื™ืชื ื• ืฉื, ืขืœื™ืš ืœื”ื•ืจื™ื“ ืืช ื”ืžืงื•ืจ, ืœื‘ื ื•ืช ื•ืœืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื•:

git clone https://github.com/EnMasseProject/enmasse-example-clients
cd enmasse-example-clients/quarkus-example-client
oc new-project myapp
mvn -Pnative -Dfabric8.mode=openshift -Dfabric8.build.strategy=docker package fabric8:build fabric8:resource fabric8:apply

ืœืื—ืจ ืคืงื•ื“ื•ืช ืืœื•, ื”ื™ื™ืฉื•ื ื™ื™ืคืจืก, ืืš ืœื ื™ืชื—ื™ืœ ืขื“ ืฉื ืงื‘ืข ืืช ืžืฉืื‘ื™ ื”ื”ื•ื“ืขื•ืช ืฉืื ื• ืฆืจื™ื›ื™ื ื‘-AMQ Online.

ื”ื’ื“ืจืช ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช

ื›ืขืช ื›ืœ ืฉื ื•ืชืจ ื”ื•ื ืœื”ื’ื“ื™ืจ ืืช ื”ืžืฉืื‘ื™ื ืฉื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืฆืจื™ื›ื” ื‘ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช. ืœืฉื ื›ืš, ืขืœื™ืš ืœื™ืฆื•ืจ: 1) ืžืจื—ื‘ ื›ืชื•ื‘ื•ืช ื›ื“ื™ ืœืืชื—ืœ ืืช ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช; 2) ื›ืชื•ื‘ืช ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ื›ืชื•ื‘ื•ืช ืฉื‘ื”ืŸ ืื ื• ืžืฉืชืžืฉื™ื ื‘ืืคืœื™ืงืฆื™ื”; 3) ื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ืœืžืฉืชืžืฉ ืœื”ื’ื“ื™ืจ ืื™ืฉื•ืจื™ ืœืงื•ื—.

ืฉื˜ื— ื›ืชื•ื‘ื•ืช

ืื•ื‘ื™ื™ืงื˜ AddressSpace ื‘-AMQ Online ื”ื•ื ืงื‘ื•ืฆื” ืฉืœ ื›ืชื•ื‘ื•ืช ื”ื—ื•ืœืงื•ืช ื ืงื•ื“ื•ืช ืงืฆื” ืฉืœ ื—ื™ื‘ื•ืจ ื•ืžื“ื™ื ื™ื•ืช ืื™ืžื•ืช ื•ื”ืจืฉืื”. ื›ืืฉืจ ืืชื” ื™ื•ืฆืจ ืžืจื—ื‘ ื›ืชื•ื‘ื•ืช, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ื›ื™ืฆื“ ื ืงื•ื“ื•ืช ืงืฆื” ืœื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ื™ื—ืฉืคื•:

apiVersion: enmasse.io/v1beta1
kind: AddressSpace
metadata:
  name: quarkus-example
spec:
  type: brokered
  plan: brokered-single-broker
  endpoints:
  - name: messaging
    service: messaging
    exports:
    - name: quarkus-config
      kind: configmap

ื›ืชื•ื‘ืช

ื›ืชื•ื‘ื•ืช ืžืฉืžืฉื•ืช ืœืฉืœื™ื—ืช ื•ืงื‘ืœืช ื”ื•ื“ืขื•ืช. ืœื›ืœ ื›ืชื•ื‘ืช ื™ืฉ ืกื•ื’, ืฉืงื•ื‘ืข ืืช ื”ืกืžื ื˜ื™ืงื” ืฉืœื”, ื›ืžื• ื’ื ืชื•ื›ื ื™ืช, ื”ืžืฆื™ื™ื ืช ืืช ืžืกืคืจ ื”ืžืฉืื‘ื™ื ืฉื™ืฉ ืœืฉืžื•ืจ. ื ื™ืชืŸ ืœืงื‘ื•ืข ืืช ื”ื›ืชื•ื‘ืช, ืœืžืฉืœ, ื›ืš:

apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
  name: quarkus-example.orders
spec:
  address: orders
  type: queue
  plan: brokered-queue

ืžืฉืชืžืฉ ื‘ื”ื•ื“ืขื•ืช

ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉืจืง ืืคืœื™ืงืฆื™ื•ืช ืžื”ื™ืžื ื•ืช ื™ื•ื›ืœื• ืœืฉืœื•ื— ื•ืœืงื‘ืœ ื”ื•ื“ืขื•ืช ืœื›ืชื•ื‘ื•ืช ืฉืœืš, ืขืœื™ืš ืœื™ืฆื•ืจ ืžืฉืชืžืฉ ื‘ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช. ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ื ื”ืคื•ืขืœื™ื ืขืœ ืืฉื›ื•ืœ, ืœืงื•ื—ื•ืช ื™ื›ื•ืœื™ื ืœืขื‘ื•ืจ ืื™ืžื•ืช ื‘ืืžืฆืขื•ืช ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช OpenShift. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช "ื—ืฉื‘ื•ืŸ ื”ืฉื™ืจื•ืช" ืฉืœ ื”ืžืฉืชืžืฉ, ืœืžืฉืœ, ื›ืš:

apiVersion: user.enmasse.io/v1beta1
kind: MessagingUser
metadata:
  name: quarkus-example.app
spec:
  username: system:serviceaccount:myapp:default
  authentication:
    type: serviceaccount
  authorization:
  - operations: ["send", "recv"]
    addresses: ["orders"]

ื”ืจืฉืื•ืช ืœื”ื’ื“ื™ืจ ืืช ื”ืืคืœื™ืงืฆื™ื”

ืขืœ ืžื ืช ืฉ-AMQ Online ืชื™ืฆื•ืจ ืืช ืžืคืช ื”ืชืฆื•ืจื” ืฉื‘ื” ื”ืฉืชืžืฉื ื• ืœื”ื˜ืžืขืช ืžื™ื“ืข ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ AMQP, ื™ืฉ ืœื”ื’ื“ื™ืจ ืืช ื”ืชืคืงื™ื“ ื•ืืช ื”ืชืคืงื™ื“ื™ื:

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: quarkus-config
spec:
  rules:
  - apiGroups: [ "" ]
    resources: [ "configmaps" ]
    verbs: [ "create" ]
  - apiGroups: [ "" ]
    resources: [ "configmaps" ]
    resourceNames: [ "quarkus-config" ]
    verbs: [ "get", "update", "patch" ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: quarkus-config
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: quarkus-config
subjects:
- kind: ServiceAccount
  name: address-space-controller
  namespace: amq-online-infra

ื›ื™ืฆื“ ืœื”ื—ื™ืœ ืชืฆื•ืจื•ืช

ืืชื” ื™ื›ื•ืœ ืœื”ื—ื™ืœ ืืช ืชืฆื•ืจืช ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช ื›ืš:

cd enmasse-example-clients/quarkus-example-client
oc project myapp
oc apply -f src/main/resources/k8s/addressspace
oc apply -f src/main/resources/k8s/address

ืื™ืžื•ืช ืืคืœื™ืงืฆื™ื”

ื›ื“ื™ ืœื•ื•ื“ื ืฉื”ืืคืœื™ืงืฆื™ื” ื”ืชื—ื™ืœื”, ืงื•ื“ื ื›ืœ, ื‘ื•ืื• ื ื‘ื“ื•ืง ืื ื”ื›ืชื•ื‘ื•ืช ื”ืžืชืื™ืžื•ืช ื ื•ืฆืจื• ื•ื”ืŸ ืคืขื™ืœื•ืช:

until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done

ืื– ื‘ื•ื ื ื‘ื“ื•ืง ืืช ื›ืชื•ื‘ืช ื”ืืชืจ ืฉืœ ืžืกืœื•ืœ ื”ืืคืœื™ืงืฆื™ื” (ืคืฉื•ื˜ ืคืชื— ืืช ื”ื›ืชื•ื‘ืช ื”ื–ื• ื‘ื“ืคื“ืคืŸ):

echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"

ื”ื“ืคื“ืคืŸ ืฆืจื™ืš ืœื”ืจืื•ืช ืฉื”ื›ืจื˜ื™ืกื™ื ืžืชืขื“ื›ื ื™ื ืžืขืช ืœืขืช ื›ืืฉืจ ื”ื•ื“ืขื•ืช ื ืฉืœื—ื•ืช ื•ืžืชืงื‘ืœื•ืช ืขืœ ื™ื“ื™ AMQ Online.

ืกื›ื•ื

ืื– ื›ืชื‘ื ื• ืืคืœื™ืงืฆื™ื™ืช Quarkus ืฉืžืฉืชืžืฉืช ื‘-AMQP ืœื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช, ื”ื’ื“ืจื ื• ืืช ื”ืืคืœื™ืงืฆื™ื” ืœืจื•ืฅ ืขืœ ืคืœื˜ืคื•ืจืžืช Red Hat OpenShift, ื•ื™ื™ืฉืžื ื• ืืช ื”ืชืฆื•ืจื” ืฉืœื” ืขืœ ืกืžืš ืชืฆื•ืจืช AMQ Online. ืœืื—ืจ ืžื›ืŸ ื™ืฆืจื ื• ืืช ื”ืžื ื™ืคืกื˜ื™ื ื”ื“ืจื•ืฉื™ื ืœืืชื—ื•ืœ ืžืขืจื›ืช ื”ื”ื•ื“ืขื•ืช ืขื‘ื•ืจ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื•.

ื‘ื›ืš ืžืกืชื™ื™ืžืช ื”ืกื“ืจื” ืขืœ ืงื•ื•ืืจืงื•ืก, ืื‘ืœ ื™ืฉ ื”ืจื‘ื” ื“ื‘ืจื™ื ื—ื“ืฉื™ื ื•ืžืขื ื™ื™ื ื™ื ืœืคื ื™ื ื•, ื”ื™ืฉืืจื• ืžืขื•ื“ื›ื ื™ื!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”