Moni nonse! Izi ndi izi - positi yathu yomaliza pamndandanda wa Quarkus! (Mwa njira, onani webinar yathu
Π
Kuyambira mtundu 0.17.0,
Zimaganiziridwa kuti mwatumiza kale AMQ Online pa nsanja ya OpenShift (ngati sichoncho, onani
Kuti tiyambe, tipanga pulogalamu ya Quarkus yomwe ingakhale njira yosavuta yopangira madongosolo pogwiritsa ntchito mameseji okhazikika. Pulogalamuyi iphatikizanso jenereta yamaoda yomwe imatumiza maoda pamzere wauthenga pakanthawi kokhazikika, komanso pulogalamu yoyitanitsa yomwe ikonza mauthenga kuchokera pamzere ndikupanga zitsimikiziro zomwe zimawoneka mumsakatuli.
Tikangopanga pulogalamuyo, tikuwonetsani momwe mungayikitsire dongosolo la mauthenga mu pulogalamuyo ndikugwiritsa ntchito AMQ Online kupereka zofunikira pakompyuta.
Pulogalamu ya Quark
Ntchito yathu ya Quarkus imayenda pa OpenShift ndipo ndi mtundu wosinthidwa wa pulogalamuyi
Kodi jenereta
Jeneretayo imangotumiza ma ID omwe akukulirakulira ku adilesi ya "maoda" masekondi 5 aliwonse.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Order processor
Wothandizira madongosolo ndiwosavuta, amangobweza ID yotsimikizira ku adilesi ya "zitsimikizo".
@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;
}
}
Zida Zotsimikizira
Chitsimikizochi ndi HTTP yomaliza kuti mulembe zotsimikizira zopangidwa ndi pulogalamu yathu.
@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;
}
}
kusintha
Kuti mulumikizane ndi AMQ Online, pulogalamu yathu idzafunika zosintha, zomwe ndi: Kusintha kwa cholumikizira cha Quarkus, chidziwitso chakumapeto kwa AMQP ndi zidziwitso za kasitomala. Ndiko kuti, ndikwabwino kusunga zosintha zonse pamalo amodzi, koma tidzawalekanitsa mwadala kuti tiwonetse zomwe zingatheke pakukonza pulogalamu ya Quarkus.
Zolumikizira
Kusintha kwa cholumikizira kutha kuperekedwa panthawi yophatikizira pogwiritsa ntchito fayilo yamapulogalamu:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Kuti zinthu zikhale zosavuta, tidzangogwiritsa ntchito pamzere wa mauthenga pa adilesi ya "maoda". Ndipo adilesi ya "zitsimikizo" mukugwiritsa ntchito kwathu idzagwiritsa ntchito mzere wokumbukira.
Mtengo wapatali wa magawo AMQP
Panthawi yophatikizira, dzina la alendo ndi nambala ya doko la AMQP endpoint sizikudziwika, kotero ziyenera kubayidwa. Mapeto atha kukhazikitsidwa mu configmap yomwe imapangidwa ndi AMQ Online, kotero tidzawafotokozera kudzera mumitundu yosiyanasiyana yachiwonetsero:
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
Zidziwitso
Chizindikiro chaakaunti yautumiki chingagwiritsidwe ntchito kutsimikizira kugwiritsa ntchito kwathu ku OpenShift. Kuti muchite izi, muyenera kupanga kaye ConfigSource yomwe idzawerenge chizindikiro chotsimikizika kuchokera pamafayilo a 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);
}
}
Pangani ndi Kutumiza Ntchito
Popeza ntchitoyo iyenera kupangidwa kukhala fayilo yotheka, makina enieni a GraalVM amafunikira. Kuti mudziwe zambiri za momwe mungakhazikitsire chilengedwe cha izi, onani malangizo ofananira nawo
Kenako, potsatira malangizo omwe aperekedwa pamenepo, muyenera kutsitsa gwero, kumanga ndi kutumiza pulogalamu yathu:
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
Pambuyo pa malamulowa, ntchitoyo idzatumizidwa, koma sichidzayamba mpaka titakonza mauthenga omwe tikufuna mu AMQ Online.
Kukhazikitsa dongosolo la mauthenga
Tsopano chomwe chatsala ndikukhazikitsa zofunikira zomwe pulogalamu yathu imafunikira pamakina a mauthenga. Kuti muchite izi, muyenera kupanga: 1) malo adiresi kuti muyambe mapeto a mauthenga; 2) adilesi yokonza maadiresi omwe timagwiritsa ntchito pakugwiritsa ntchito; 3) Wogwiritsa ntchito mauthenga kuti akhazikitse zidziwitso za kasitomala.
Malo adilesi
Chinthu cha AddressSpace mu AMQ Online ndi gulu la maadiresi omwe amagawana zomaliza zolumikizirana ndikutsimikizira ndi kuvomereza mfundo. Mukapanga malo adilesi, mutha kufotokoza momwe mathero a mauthenga adzawululidwe:
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
Maadiresi
Maadiresi amagwiritsidwa ntchito kutumiza ndi kulandira mauthenga. Adilesi iliyonse ili ndi mtundu, womwe umatsimikizira semantics yake, komanso ndondomeko, yomwe imatchula chiwerengero cha zinthu zomwe ziyenera kusungidwa. Adilesi imatha kuzindikirika, mwachitsanzo, motere:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Wogwiritsa ntchito mauthenga
Kuonetsetsa kuti mapulogalamu odalirika okha ndi omwe angatumize ndi kulandira mauthenga ku maadiresi anu, muyenera kupanga wogwiritsa ntchito mauthenga. Pamapulogalamu omwe akuyenda pagulu, makasitomala amatha kutsimikiziridwa pogwiritsa ntchito akaunti yautumiki ya OpenShift. Wogwiritsa "akaunti yautumiki" amatha kufotokozedwa, mwachitsanzo, motere:
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"]
Zilolezo zokonza pulogalamu
Kuti AMQ Online ipange configmap yomwe tidagwiritsa ntchito kuyika zambiri za AMQP, Role ndi RoleBinding ziyenera kukhazikitsidwa:
---
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
Momwe mungagwiritsire ntchito masinthidwe
Mutha kugwiritsa ntchito kasinthidwe ka mauthenga monga chonchi:
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
Kutsimikizira ntchito
Kuti muwonetsetse kuti pulogalamuyo yayamba, choyamba, tiyeni tiwone ngati ma adilesi ofananira adapangidwa ndipo akugwira ntchito:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Kenako tiyeni tiwone ulalo wa njira yogwiritsira ntchito (ingotsegulani adilesi iyi mu msakatuli):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Msakatuli akuyenera kuwonetsa kuti matikiti amasinthidwa nthawi ndi nthawi pomwe mauthenga amatumizidwa ndikulandiridwa ndi AMQ Online.
Kuphatikizidwa
Chifukwa chake tidalemba pulogalamu ya Quarkus yomwe imagwiritsa ntchito AMQP potumizirana mauthenga, tidakonza pulogalamuyo kuti iyendetse pa nsanja ya Red Hat OpenShift, ndikukhazikitsa kasinthidwe kake potengera kasinthidwe ka AMQ Online. Kenako tidapanga ma manifesto ofunikira kuti tiyambitse njira yotumizira mauthenga pakugwiritsa ntchito kwathu.
Izi zikumaliza mndandanda wa Quarkus, koma pali zinthu zambiri zatsopano komanso zosangalatsa zomwe zikubwera, khalani maso!
Source: www.habr.com