Cloud-nativa Nuntius in Rubrum Hat OpenShift suggestum per Quarkus et AMQ Online

Hi omnes! Hic est - nostrum extremum in serie Quarkus! (Viam nostram vigilate webinar "Hoc est Quarkus - Kubernetes indigena Java compage". Ostendam tibi quomodo incipias a scabere vel transferre solutiones paratas)

Cloud-nativa Nuntius in Rubrum Hat OpenShift suggestum per Quarkus et AMQ Online

Π’ prior In hoc posto instrumenta pertinentia inspeximus quae emendare uti possunt quantitati ex applicationibus Javae modernisandi consecuti sunt.

Cum versione 0.17.0; quarkus Usus sustinet Protocollum Nuntius Queuing (AMQP) , quod est signum apertum ad transferendum negotium nuntios inter applicationes vel Instituta.

Red Hat AMQ Online Est ministerium constructum ex aperto fonte project EnMasse et exsequentes suggestum-fundatur messaging mechanism Rubrum Hat OpenShift. For more details on quomodo operatur, vide hic (EN). Hodie ostendemus vobis quomodo AMQ Online coniungendi et Quarkus fabricandi rationem moderni OpenShift-substructi nuntii technologias utentes duas novas technologias nuntiandi.

Ponitur te iam AMQ Online in OpenShift destruxit suggestum (si non, vide institutionem dux).

Committitur, applicationem Quarkus creabimus quae simplex erit ordo processus systematis utendi reactivum nuntius. Haec applicatio ordinem generantis comprehendet qui ordines ad nuntium queue certo intervallo mittit, itemque processus ordo qui nuntios a queue et confirmationes in navigatro spectabiles generabit.

Cum applicationem creavimus, ostendemus vobis quomodo conformationem systematis nuntiandi in applicatione et AMQ Online usum adhibeamus ad providendum facultates quae in systemate egent.

Quarkus app

Noster Quarkus applicationem decurrit in OpenShift et mutatio versionis progressionis amqp-cito. Plene exemplum huius lateris inveniri potest hic.

Ordo generantis

Generator simpliciter monotonice ordinem IDs crescentem mittit ad "iussos" singulas 5 seconds electronicas.

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

Ordo Processor

Ordo tracto simplicior est, hoc modo confirmationem ID reddit ad "confirmationes" electronicas.

@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;
    }
}

Confirmatio Resources

Subsidium confirmationis HTTP est terminus ad enumerandas confirmationes ab applicatione nostra generatas.

@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;
    }
}

tionibus

Coniungere ad AMQ Online, applicatio nostra aliqua notitia conformationis indigebit, nempe: Quarkus iungo configurationem, AMQP terminus notitiarum et documentorum clientium. Melius quidem est ut omnes notitias conformationis in uno loco contineant, sed consulto eas separabimus ut optiones possibilis pro applicatione Quarkus figurandi ostendant.

Connectors

Conector configurationem praeberi potest ad tempus ordinandi utens tabella proprietatum applicationis:

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

Ad simplicia custodienda, tantum nuntium queue pro inscriptione "iussus" adhibebimus. Et inscriptionis "confirmationes" in nostra applicatione queue in memoria adhibebit.

AMQP endpoint

In tempore compilare, hostname et numerus portus pro AMQP terminus ignoti sunt, ideo injicienda sunt. Finis constitui potest in configmap quod per AMQ Online creatum est, sic eas per variabiles ambitus in applicatione manifesta definiemus;

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

Documentorum

Ministerium rationis tessera adhiberi potest ad applicationem ad OpenShift signo authenticitatis munito. Ad hoc faciendum, debes primum consuetudinem Mando, quae authenticas documentum e fasciculi systematis vasculi leget;

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);
    }
}

Aedificare et explica Applicationem

Cum applicatio in documentum exsecutabile componi debet, machina virtualis GraalVM requiritur. Singula enim quomodo ambitum huius rei constituant, instructiones correspondentes vide in Quarkus Guide.

Deinde, iuxta mandata ibi data, fontem quaere, nostram applicationem aedifica et explica;

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

Post haec mandata applicatio explicabitur, sed non incipiet donec facultates nuntiis in AMQ Online configurare debeamus.

Erexit quantitatem ratio

Nunc omne reliquum est, ut facultates quas applicatio nostra in systemate nuntiando indigeat. Ad hoc efficiendum opus est: 1) spatium inscriptionis initiali ad systema nuntiandi designandum; 2) oratio configurare inscriptiones in applicatione utimur; III) Nuntius user ad clientem documentorum.

Oratio spatium

Objectum AddressSpace in AMQ Online est coetus inscriptionum quae connexionem habent terminos et authenticas et auctoritatis agendi rationes. Cum spatium electronicum creas, exprimere potes quomodo fines nuntii patebunt:

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

oratio

Inscriptiones ad nuntios mittere et accipere solebant. Quaeque oratio habet speciem, quae sua semantica determinat, tum consilium, quod determinat numerum facultatum reservandae. Inscriptio determinari potest, exempli gratia, hoc modo:

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

Nuntius user

Ut solum applicationes creditae nuntiis tuis inscriptionibus mittere ac recipere possint, debes usorem creare in systemate nuntiandi. Ad applicationes in botro currentes clientes authentice utentes rationem muneris OpenShift. Usoris "obsequium" definiri potest, exempli gratia, hoc modo:

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"]

Permissiones configurare in application

Ut pro AMQ Online ad configmapum creandum quod in AMQP designari consuevimus, munus et RoleBinding constituendae sunt:

---
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

Quomodo figurationes adhibere

Configurationis ratiocinationi applicari potes sic:

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

Applicationem verificationem

Fac ut applicatio incepit, ante omnia, inspiciamus num inscriptiones respondentes creatae sint et activae sint:

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

Deinde viam applicationis URL reprehendo (mox haec inscriptio in navigatro aperi);

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

Navigatorium ostendere debet tesseras periodice renovatas esse cum nuntiis ab AMQ Online missis et recipiendis.

quoquo

Ita scripsimus applicationem Quarkus quae AMQP ad messingem adhibet, applicationem conformavit ad currendum in suggestu Rubro Hat OpenShift, et eius configurationem in AMQ Online configuratione implevit. Nos igitur manifestas necessitates creavimus ut systema nuntiandi ad nostram applicationem initialem perveniamus.

Hanc seriem de Quarkus concludit, sed multa nova et iucunda sunt antecedens, versatur!

Source: www.habr.com