Melaetsa ea tlhaho ea leru sethaleng sa Red Hat OpenShift se sebelisa Quarkus le AMQ Online

Lumelang bohle! Ke ena - poso ea rona ea ho qetela letotong la Quarkus! (Ka tsela, shebella webinar ea rona "Ena ke Quarkus - Kubernetes sebopeho sa Java sa matsoalloa". Re tla u bonts'a mokhoa oa ho qala ho tloha qalong kapa ho fetisa litharollo tse seng li entsoe)

Melaetsa ea tlhaho ea leru sethaleng sa Red Hat OpenShift se sebelisa Quarkus le AMQ Online

В e fetileng Ka poso ena, re shebile lisebelisoa tse nepahetseng tse ka sebelisoang ho lekanya lintlafatso tse fihletsoeng ka ho ntlafatsa lits'ebetso tsa Java.

Ho tloha ka mofuta oa 0.17.0, quarkus e tšehetsa tšebeliso ea Advanced Message Queuing Protocol (AMQP), e leng mokhoa o bulehileng oa ho fetisa melaetsa ea khoebo pakeng tsa likopo kapa mekhatlo.

Red Hat AMQ Online - ke tšebeletso e hahiloeng motheong oa morero oa mohloli o bulehileng EnMasse le ho kenya ts'ebetsong mokhoa oa melaetsa o thehiloeng sethaleng RedHat OpenShiftHo fumana lintlha tse ling mabapi le hore na e sebetsa joang, bona mona (EN)Kajeno re tla u bontša mokhoa oa ho kopanya AMQ Online le Quarkus ho aha mokhoa oa morao-rao oa melaetsa ho OpenShift o sebelisa mekhoa e 'meli e mecha e amanang le ho sebetsana le melaetsa.

Ho nahanoa hore o se o kentse AMQ Online sethaleng sa OpenShift (haeba ho se joalo, bona tataiso ea ho kenya).

Ho qala, re tla theha ts'ebeliso ea Quarkus e tla ba sistimi e bonolo ea ts'ebetso ea odara e sebelisang melaetsa e sebetsang. Sesebelisoa sena se tla kenyelletsa jenereithara ea odara e romellang liodara moleng oa melaetsa ka nako e behiloeng, le processor ea liodara e tsamaisang melaetsa ho tsoa moleng le ho hlahisa linetefatso tse ka bonoang ho sebatli.

Hang ha kopo e se e entsoe, re tla u bontša mokhoa oa ho kenya ts'ebetsong tsamaiso ea melaetsa le ho sebelisa AMQ Online ho fana ka lisebelisoa tseo re li hlokang tsamaisong ea melaetsa.

Sesebelisoa sa Quarkus

Sesebelisoa sa rona sa Quarkus se sebetsa ho OpenShift mme ke mofuta o fetotsoeng oa lenaneo amqp - qala ka potlako. Mohlala o felletseng oa karolo ea moreki o ka fumanoa mona.

Odara jenereithara

Jenereithara e romella feela li-ID tse ntseng li eketseha ho aterese ea "litaelo" metsotsoana e meng le e meng e 5.

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

Odara processor

Sesebelisoa sa odara se bonolo le ho feta, se khutlisetsa ID ea netefatso atereseng ea "litiiso".

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

Lisebelisoa tsa Tiiso

Sesebelisoa sa assertion ke pheletso ea HTTP bakeng sa lethathamo la litaba tse hlahisoang ke ts'ebeliso ea rona.

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

phetoho

Ho hokela ho AMQ Online, sesebelisoa sa rona se tla hloka lintlha tse itseng tsa tlhophiso, e leng: tlhophiso ea sehokelo sa Quarkus, tlhaiso-leseling ea AMQP ea pheletso, le lintlha tsa bareki. Ehlile, ho molemo ho boloka lintlha tsohle tsa tlhophiso sebakeng se le seng, empa re tla li arola ho bonts'a likhetho tse ka khonehang bakeng sa ho hlophisa ts'ebeliso ea Quarkus.

Lihokelo

Tlhophiso ea sehokelo e ka fanoa ka nako ea ho kopanya ho sebelisoa faele ea thepa ea kopo:

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

Ho boloka lintho li le bonolo, re tla sebelisa feela mola oa melaetsa bakeng sa aterese ea "litaelo". Aterese ea "litiiso" ts'ebelisong ea rona e tla sebelisa lethathamo la mohopolo.

AMQP qetellong

Ka nako ea ho bokella, lebitso la moamoheli le nomoro ea boema-kepe bakeng sa pheletso ea AMQP ha e tsejoe, kahoo e hloka ho entoa. Qetello e ka hlalosoa ho configmap eo AMQ Online e e etsang, kahoo re e hlalosa ka mefuta e fapaneng ea tikoloho ho pontšo ea kopo:

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

Lintlha tsa bopaki

Re ka sebelisa lets'oao la ak'haonte ea litšebeletso ho netefatsa kopo ea rona ho OpenShift. Ho etsa sena, pele re hloka ho theha ConfigSource e tloaelehileng e tla bala lets'oao la netefatso ho tsoa ho sistimi ea faele ea pod:

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

Ho aha le ho tsamaisa kopo

Kaha kopo e hloka ho bokelloa faeleng e ka sebetsoang, ho hlokahala mochini o sebetsang oa GraalVM. Bakeng sa lintlha tse mabapi le mokhoa oa ho theha tikoloho bakeng sa sena, bona litaelo tse tsamaellanang ho Tataiso ea Quarkus.

Ebe, ho latela litaelo tse fanoeng moo, o hloka ho khoasolla khoutu ea mohloli, ho e aha le ho sebelisa ts'ebeliso ea rona:

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

Ka mor'a litaelo tsena, kopo e tla romelloa, empa e ke ke ea qala ho fihlela re lokisa lisebelisoa tsa melaetsa tseo re li hlokang ho AMQ Online.

Ho theha sistimi ea melaetsa

Hona joale ho setseng ke ho theha lisebelisoa tsamaisong ea melaetsa eo kopo ea rona e e hlokang. Ho etsa sena, re hloka ho theha: 1) sebaka sa aterese ho qala pheletso ea sistimi ea melaetsa; 2) aterese ea ho hlophisa liaterese tseo re li sebelisang ts'ebelisong; 3) mosebelisi oa sistimi ea melaetsa ho theha lintlha tsa moreki.

Sebaka sa aterese

Ntho ea AddressSpace ho AMQ Online ke sehlopha sa liaterese tse arolelanang lintlha tsa khokahano le maano a netefatso le tumello. Ha o theha sebaka sa aterese, o ka hlakisa hore na li-endpoint tsa melaetsa li fanoa joang:

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

Li-aterese

Liaterese li sebelisoa ho romella le ho amohela melaetsa. Aterese ka 'ngoe e na le mofuta o hlalosang semantics ea eona, hammoho le moralo o hlalosang palo ea lisebelisoa tse lokelang ho bolokoa. Aterese e ka hlalosoa, mohlala, joalo ka:

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

Mosebelisi oa sistimi ea melaetsa

Ho netefatsa hore ke lits'ebetso tse tšepahalang feela tse ka romellang le ho amohela melaetsa ho liaterese tsa hau, o hloka ho theha mosebelisi ho sistimi ea melaetsa. Bakeng sa lits'ebetso tse sebetsang ho sehlopha, bareki ba ka netefatsoa ba sebelisa ak'haonte ea ts'ebeletso ea OpenShift. Mosebelisi "account account" e ka hlalosoa, mohlala, joalo ka:

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

Litumello tsa ho beakanya li-app

E le hore AMQ Online e ka etsa configmap eo re neng re e sebelisa ho kenya lintlha tsa AMQP tsa pheletso, re hloka ho theha Karolo le RoleBinding:

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

Mokhoa oa ho sebelisa litlhophiso

U ka sebelisa tlhophiso ea sistimi ea melaetsa joalo ka:

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

Netefatso ya kopo

Ho etsa bonnete ba hore ts'ebeliso e se e qalile, qala ka ho hlahloba hore na liaterese tse tsamaellanang li entsoe 'me lia sebetsa:

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

Joale ha re hlahlobeng URL ea tsela ea ts'ebeliso ( bula aterese ena ho sebatli):

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

Ka har'a sebatli u lokela ho bona hore litekete li nchafatsoa nako le nako ha melaetsa e romelloa le ho amoheloa ke AMQ Online.

Ho akaretsa

Kahoo, re ngotse ts'ebeliso ea Quarkus e sebelisang AMQP bakeng sa melaetsa, re lokiselitse kopo hore e sebetse sethaleng sa Red Hat OpenShift, 'me ra sebelisa sebopeho sa eona se thehiloeng ho AMQ Online tlhophiso. Ka mor'a moo re thehile li-manifest tse hlokahalang ho qala tsamaiso ea melaetsa bakeng sa ts'ebeliso ea rona.

Sena se phethela letoto la rona la Quarkus, empa ho na le lintho tse ngata tse ncha le tse khahlisang tse tlang, lula u mametse!

Source: www.habr.com

Reka sebaka se tšepahalang sa libaka tse nang le ts'ireletso ea DDoS, li-server tsa VPS VDS 🔥 Reka sebaka se tšepahalang sa ho amohela webosaete ka tšireletso ea DDoS, li-server tsa VPS VDS | ProHoster