Helo pawb! Dyma fo - ein post olaf yn y gyfres Quarkus! (Gyda llaw, gwyliwch ein gweminar
Π
Ers fersiwn 0.17.0,
Tybir eich bod eisoes wedi defnyddio AMQ Online ar y platfform OpenShift (os na, yna gweler
I ddechrau, byddwn yn creu cymhwysiad Quarkus a fydd yn system prosesu archebion syml gan ddefnyddio negeseuon adweithiol. Bydd y cymhwysiad hwn yn cynnwys generadur archeb sy'n anfon archebion i giw neges ar gyfnod penodol, yn ogystal Γ’ phrosesydd archeb a fydd yn prosesu negeseuon o'r ciw ac yn cynhyrchu cadarnhad y gellir ei weld yn y porwr.
Unwaith y byddwn wedi creu'r cymhwysiad, byddwn yn dangos i chi sut i fewnosod cyfluniad y system negeseuon yn y rhaglen a defnyddio AMQ Online i ddarparu'r adnoddau sydd eu hangen arnom ar y system.
Ap Quarkus
Mae ein cymhwysiad Quarkus yn rhedeg ar OpenShift ac mae'n fersiwn wedi'i addasu o'r rhaglen
Archebwch generadur
Yn syml, mae'r generadur yn anfon IDau archeb gynyddol i'r cyfeiriad βarchebionβ bob 5 eiliad.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Prosesydd Archeb
Mae'r triniwr archeb hyd yn oed yn symlach, mae'n dychwelyd ID cadarnhad i'r cyfeiriad "cadarnhau".
@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;
}
}
Adnoddau Cadarnhau
Mae'r adnodd cadarnhau yn bwynt terfyn HTTP ar gyfer rhestru'r cadarnhadau a gynhyrchir gan ein cais.
@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;
}
}
addasiad
Er mwyn cysylltu ag AMQ Ar-lein, bydd angen rhywfaint o ddata cyfluniad ar ein cais, sef: cyfluniad cysylltydd Quarkus, gwybodaeth pwynt terfyn AMQP a chymwysterau cleient. Wrth gwrs, mae'n well cadw'r holl ddata cyfluniad mewn un lle, ond byddwn yn eu gwahanu'n fwriadol i ddangos yr opsiynau posibl ar gyfer ffurfweddu'r cymhwysiad Quarkus.
Cysylltwyr
Gellir darparu ffurfweddiad cysylltydd ar amser llunio gan ddefnyddio ffeil priodweddau cymhwysiad:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
I gadw pethau'n syml, dim ond ciw neges ar gyfer y cyfeiriad "archebion" y byddwn yn ei ddefnyddio. A bydd y cyfeiriad βcadarnhadβ yn ein cais yn defnyddio ciw er cof.
diweddbwynt AMQP
Ar amser llunio, nid yw'r enw gwesteiwr a rhif y porthladd ar gyfer diweddbwynt AMQP yn hysbys, felly mae'n rhaid eu chwistrellu. Gellir gosod y diweddbwynt yn y configmap sy'n cael ei greu gan AMQ Online, felly byddwn yn eu diffinio trwy newidynnau amgylchedd ym maniffest y cymhwysiad:
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
Cymwysterau
Gellir defnyddio'r tocyn cyfrif gwasanaeth i ddilysu ein cais i OpenShift. I wneud hyn, yn gyntaf rhaid i chi greu ConfigSource arferol a fydd yn darllen y tocyn dilysu o system ffeiliau'r 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);
}
}
Adeiladu a Defnyddio'r Cais
Gan fod yn rhaid i'r cais gael ei lunio'n ffeil gweithredadwy, mae angen peiriant rhithwir GraalVM. Am fanylion ar sut i sefydlu amgylchedd ar gyfer hyn, gweler y cyfarwyddiadau cyfatebol yn
Yna, gan ddilyn y cyfarwyddiadau a roddir yno, mae angen i chi lawrlwytho'r ffynhonnell, adeiladu a defnyddio ein cymhwysiad:
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
Ar Γ΄l y gorchmynion hyn, bydd y cymhwysiad yn cael ei ddefnyddio, ond ni fydd yn cychwyn nes i ni ffurfweddu'r adnoddau negeseuon sydd eu hangen arnom yn AMQ Online.
Sefydlu'r system negeseuon
Nawr y cyfan sydd ar Γ΄l yw gosod yr adnoddau sydd eu hangen ar ein cymhwysiad yn y system negeseuon. I wneud hyn, mae angen i chi greu: 1) gofod cyfeiriad i gychwyn pwynt terfyn y system negeseuon; 2) cyfeiriad i ffurfweddu'r cyfeiriadau a ddefnyddiwn yn y cais; 3) Negeseuon defnyddiwr i osod tystlythyrau cleient.
Gofod cyfeiriad
Mae gwrthrych AddressSpace yn AMQ Online yn grΕ΅p o gyfeiriadau sy'n rhannu diweddbwyntiau cysylltiad a pholisΓ―au dilysu ac awdurdodi. Pan fyddwch chi'n creu gofod cyfeiriad, gallwch chi nodi sut y bydd pwyntiau terfyn negeseuon yn cael eu hamlygu:
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
Cyfeiriadau
Defnyddir cyfeiriadau i anfon a derbyn negeseuon. Mae gan bob cyfeiriad fath, sy'n pennu ei semanteg, yn ogystal Γ’ chynllun, sy'n nodi nifer yr adnoddau i'w cadw. Gellir pennu'r cyfeiriad, er enghraifft, fel hyn:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Defnyddiwr negeseuon
Er mwyn sicrhau mai dim ond cymwysiadau dibynadwy all anfon a derbyn negeseuon i'ch cyfeiriadau, rhaid i chi greu defnyddiwr yn y system negeseuon. Ar gyfer cymwysiadau sy'n rhedeg ar glwstwr, gall cleientiaid gael eu dilysu gan ddefnyddio cyfrif gwasanaeth OpenShift. Gellir diffinio'r "cyfrif gwasanaeth" defnyddiwr, er enghraifft, fel hyn:
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"]
CaniatΓ’d i ffurfweddu'r rhaglen
Er mwyn i AMQ Online greuβr configmap a ddefnyddiwyd gennym i fewnosod gwybodaeth diweddbwynt AMQP, rhaid gosod y RΓ΄l aβr Rhwymo RΓ΄l:
---
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
Sut i gymhwyso ffurfweddiadau
Gallwch chi gymhwyso cyfluniad y system negeseuon fel hyn:
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
Gwirio cais
I wneud yn siΕ΅r bod y cais wedi cychwyn, yn gyntaf oll, gadewch i ni wirio a yw'r cyfeiriadau cyfatebol wedi'u creu ac yn weithredol:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Yna gadewch i ni wirio URL llwybr y cais (agorwch y cyfeiriad hwn yn y porwr):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Dylai'r porwr ddangos bod tocynnau'n cael eu diweddaru o bryd i'w gilydd wrth i negeseuon gael eu hanfon a'u derbyn gan AMQ Online.
Crynhoi
Felly fe wnaethon ni ysgrifennu cymhwysiad Quarkus sy'n defnyddio AMQP ar gyfer negeseuon, wedi ffurfweddu'r cymhwysiad i redeg ar lwyfan Red Hat OpenShift, ac wedi gweithredu ei ffurfweddiad yn seiliedig ar gyfluniad AMQ Online. Yna fe wnaethon ni greu'r maniffestau sydd eu hangen i gychwyn y system negeseuon ar gyfer ein cymhwysiad.
Mae hyn yn cloi'r gyfres am Quarkus, ond mae llawer o bethau newydd a diddorol o'ch blaen, cadwch draw!
Ffynhonnell: hab.com