Farriinta dhalad ee daruuriga ah ee koofiyadda cas ee OpenShift iyadoo la adeegsanayo Quarkus iyo AMQ Online

Salaamu calaykum! Waa kan - boostadayada ugu dambeysa ee taxanaha Quarkus! (Sidoo kale, daawo webinar-keena "Tani waa Quarkus - Kubernetes qaabka Java ee asalka ah". Waxaan ku tusi doonaa sida looga bilaabo xoqdo ama u wareejinta xalalka diyaarsan)

Farriinta dhalad ee daruuriga ah ee koofiyadda cas ee OpenShift iyadoo la adeegsanayo Quarkus iyo AMQ Online

Π’ hore Maqaalkan, waxaan eegnay qalabka ku habboon ee loo isticmaali karo in lagu qiyaaso hagaajinta la helay natiijada casriyeynta codsiyada Java.

Laga soo bilaabo nooca 0.17.0, quruus waxay taageertaa isticmaalka borotokoolka safka fariimaha sare (Advanced Message Queuing Protocol)AMQP), kaas oo ah halbeeg furan oo lagu kala wareejinayo fariimaha ganacsiga dhexdooda codsiyada ama ururada.

Koofiyada Cas AMQ Online waa adeeg lagu dhisay mashruuc il furan EnMasse iyo hirgelinta habka fariimaha ku salaysan ee madal Koofiyada Cas OpenShift. Faahfaahin dheeraad ah oo ku saabsan sida ay u shaqeyso, arag halkan (EN). Maanta waxaan ku tusi doonaa sida la isugu daro AMQ Online iyo Quarkus si aan u dhisno nidaam farimo ku saleysan OpenShift iyadoo la adeegsanayo laba teknooloji fariimo cusub ah.

Waxaa loo maleynayaa inaad horeyba AMQ Online ugu dirtay madal OpenShift (haddii aysan ahayn, ka dibna eeg hagaha rakibaadda).

Si aan u bilowno, waxaanu samayn doonaa arji Quarkus kaas oo noqon doona nidaam habayn fudud oo la isticmaalayo fariimo falcelin ah. Codsigan waxaa ku jiri doona koronto-dhaliye u soo dira dalabaadka safka farriinta ee dhexda go'an, iyo sidoo kale processor-ka dalabka kaas oo ka baaraandegi doona fariimaha safka oo dhalin doona xaqiijin lagu arki karo browserka.

Marka aan abuurno arjiga, waxaan ku tusi doonaa sida loogu dhejiyo qaabeynta nidaamka fariimaha codsiga oo aan u isticmaalno AMQ Online si aan u siino agabka aan uga baahanahay nidaamka.

Quarkus app

Codsigayaga Quarkus wuxuu ku shaqeeyaa OpenShift waana nooca barnaamijka oo wax laga beddelay amqp-dhakhso u bilow. Tusaale dhamaystiran oo dhinaca macmiilka ah ayaa la heli karaa halkan.

Dalbashada koronto dhaliyaha

Koronto-dhaliyaha ayaa si keligiis ah u soo diraa aqoonsiga dalabka ee sii kordhaya ciwaanka β€œdalabka” 5 ilbiriqsi kasta.

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

Codso Processor

Maamulaha dalabka ayaa xitaa ka fudud, kaliya wuxuu ku soo celiyaa aqoonsiga aqoonsiga ciwaanka "xaqiijinta".

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

Khayraadka Xaqiijinta

Ilaha xaqiijinta waa barta HTTP ee liiska xaqiijinta uu keenay codsigeena.

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

sixitaanka

Si loogu xidho AMQ Online, codsigayagu wuxuu u baahan doonaa xoogaa xog habayn ah, kuwaas oo kala ah: Isku xidhka Quarkus, xogta AMQP ee dhamaadka iyo aqoonsiga macmiilka. Dabcan, way fiicantahay in lagu hayo dhammaan xogta qaabeynta hal meel, laakiin waxaan si ula kac ah u kala saari doonaa si aan u muujinno fursadaha suurtogalka ah ee habaynta codsiga Quarkus.

Xidhiidhiyayaasha

Isku xidhka isku xidhka waxa la bixin karaa wakhtiga la ururinayo iyadoo la isticmaalayo faylka guryaha ee codsiga:

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

Si wax loo fududeeyo, waxaan kaliya u isticmaali doonaa safka fariinta ciwaanka "dalabka" Iyo ciwaanka "xaqiijinta" ee codsigayaga ayaa isticmaali doona safka xusuusta.

AMQP dhamaadka

Waqtiga la ururinayo, magaca martida loo yahay iyo lambarka dekedda ee AMQP barta dhamaadka lama garanayo, marka waa in lagu duraa. Meesha ugu dambeysa waxaa lagu dejin karaa qaabeynta ay abuurtay AMQ Online, marka waxaan ku qeexi doonaa doorsoomayaasha deegaanka ee muujinta codsiga:

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

Aqoonsiga

Calaamadda akoonka adeegga waxa loo isticmaali karaa in lagu xaqiijiyo codsigayaga OpenShift. Si tan loo sameeyo, waa inaad marka hore abuurtaa ConfigSource caado ah oo akhrin doonta calaamada xaqiijinta ee nidaamka faylalka pods:

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

Dhis oo Geli Codsiga

Maadaama arjiga ay tahay in lagu soo ururiyo fayl la fulin karo, mashiinka farsamada ee GraalVM ayaa loo baahan yahay. Faahfaahinta ku saabsan sida deegaan loogu samayn karo arrintan, ka eeg tilmaamaha u dhigma ee ku jira Hagaha Quarkus.

Kadib, adoo raacaya tilmaamaha lagu siiyay halkaas, waxaad u baahan tahay inaad soo dejiso isha, dhis oo aad geyso codsigeena:

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

Awaamiirtan ka dib, codsiga waa la diri doonaa, laakiin ma bilaabmayo ilaa aan habeyno agabka fariimaha aan uga baahanahay AMQ Online.

Dejinta nidaamka fariimaha

Hadda waxa hadhay waa in la dejiyo agabka uu codsigeenu uga baahan yahay nidaamka fariimaha. Si tan loo sameeyo, waxaad u baahan tahay inaad abuurto: 1) meel ciwaanka ah si aad u bilawdo barta dhamaadka nidaamka fariimaha; 2) ciwaanka si loo habeeyo ciwaanada aanu ku isticmaalno codsiga; 3) Isticmaalaha fariimaha si uu u dejiyo aqoonsiga macmiilka.

Goobta ciwaanka

Shayga AddressSpace ee AMQ Online waa koox cinwaano ah oo wadaaga barta dhamaadka xidhiidhka iyo siyaasadaha xaqiijinta iyo oggolaanshaha. Markaad abuurto meel ciwaanka ah, waxaad qeexi kartaa sida farriimaha farriimaha loo soo bandhigi doono:

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

Cinwaanada

Cinwaanada waxaa loo isticmaalaa in lagu diro oo lagu helo fariimaha. Cinwaan kastaa wuxuu leeyahay nooc, kaas oo go'aamiya macnihiisa, iyo sidoo kale qorshe, kaas oo qeexaya tirada kheyraadka loo qoondeeyay. Cinwaanka waxa loo go'aamin karaa, tusaale ahaan, sidan:

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

Isticmaalaha fariimaha

Si loo hubiyo in kaliya codsiyada la aamini karo ay u diri karaan oo ay heli karaan fariimaha ciwaannadaada, waa inaad ku abuurtaa isticmaale nidaamka fariimaha. Codsiyada ku shaqeeya kooxa, macaamiisha waxaa lagu xaqiijin karaa iyadoo la isticmaalayo koontada adeegga OpenShift. Isticmaalaha "account service" waxa lagu qeexi karaa tusaale ahaan sidan:

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

Ogolaanshaha habaynta arjiga

Si AMQ Online ay u abuurto qaab-dhismeedka aan adeegsan jirnay si aan ugu dhejino macluumaadka AMQP, Doorka iyo RoleBinding waa in la dejiyaa:

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

Sida loo dabaqo habaynta

Waxaad codsan kartaa habaynta nidaamka fariimaha sida tan:

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

Xaqiijinta codsiga

Si loo hubiyo in codsigu bilaabmay, marka hore, aynu eegno in ciwaanada u dhigma la sameeyay iyo in kale:

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

Markaa aynu eegno dariiqa codsiga URL (kaliya ka fur ciwaanka browserka):

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

Barowsarku waa inuu muujiyaa in tigidhada la cusboonaysiiyo mar mar marka fariimaha la diro oo la helo AMQ Online.

Soo koobid

Markaa waxaan qornay codsi Quarkus oo AMQP u adeegsada fariimaha, u habeeyey arjiga si uu ugu shaqeeyo Koofiyada Cas ee OpenShift, oo aanu hirgelinay qaabayntiisa ku salaysan qaabaynta AMQ Online. Waxaan markaa abuurnay muujinta loo baahan yahay si aan u bilowno nidaamka fariimaha codsigeena.

Tani waxay soo gabagabeyneysaa taxane ku saabsan Quarkus, laakiin waxaa jira waxyaabo badan oo cusub oo xiiso leh, la soco!

Source: www.habr.com

Add a comment