Sanibonani nonke! Nakhu - okuthunyelwe kwethu kokugcina ochungechungeni lwe-Quarkus! (Ngendlela, bukela i-webinar yethu
Π
Kusukela inguqulo 0.17.0,
Kucatshangwa ukuthi usuvele uthumele i-AMQ Online endaweni yesikhulumi se-OpenShift (uma kungenjalo, bheka
Ukuze siqale, sizodala uhlelo lwe-Quarkus oluzoba uhlelo olulula lokucubungula i-oda sisebenzisa imilayezo esabelayo. Lolu hlelo lokusebenza luzobandakanya ijeneretha ye-oda ethumela ama-oda emugqeni womlayezo ngesikhathi esinqunyiwe, kanye nephrosesa ye-oda ezocubungula imilayezo esuka kulayini futhi ikhiqize iziqinisekiso ezibukeka esipheqululini.
Uma sesidale uhlelo lokusebenza, sizokukhombisa ukuthi ungashumeka kanjani ukumiswa kwesistimu yemiyalezo kuhlelo lokusebenza futhi sisebenzise i-AMQ Online ukuze sinikeze izinsiza esizidingayo ohlelweni.
Uhlelo lokusebenza lwe-Quarcus
Uhlelo lwethu lwe-Quarkus lusebenza ku-OpenShift futhi luyinguqulo yohlelo elungisiwe
Oda ijeneretha
Ijeneretha ivele ithumele ama-ID e-oda akhulayo ekhelini "lama-oda" njalo ngemizuzwana emi-5.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Oda Iphrosesa
Isibambi se-oda silula nakakhulu, sivele sibuyisele i-ID yokuqinisekisa ekhelini "lokuqinisekisa".
@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;
}
}
Izinsiza Zokuqinisekisa
Isisetshenziswa sokuqinisekisa siyisiphetho se-HTTP sokufaka kuhlu iziqinisekiso ezikhiqizwe uhlelo lwethu lokusebenza.
@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;
}
}
Yenza ngokwezifiso
Ukuze uxhume ku-AMQ Online, uhlelo lwethu lokusebenza luzodinga idatha yokucushwa, okungukuthi: Ukucushwa kwesixhumi se-Quarkus, ulwazi lwephoyinti lokugcina le-AMQP kanye nemininingwane yeklayenti. Yiqiniso, kungcono ukugcina yonke idatha yokumisa endaweni eyodwa, kodwa sizoyihlukanisa ngamabomu ukuze sibonise izinketho ezingenzeka zokumisa uhlelo lwe-Quarkus.
Izixhumi
Ukucushwa kwesixhumi kunganikezwa ngesikhathi sokuhlanganiswa kusetshenziswa ifayela lezakhiwo zohlelo lokusebenza:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Ukuze sigcine izinto zilula, sizosebenzisa umugqa wemilayezo kuphela ekhelini "lama-oda". Futhi ikheli "lokuqinisekisa" kuhlelo lwethu lokusebenza lizosebenzisa umugqa enkumbulweni.
Iphoyinti lokugcina le-AMQP
Ngesikhathi sokuhlanganiswa, igama lomethuleli nenombolo yembobo ye-AMQP ekugcineni akwaziwa, ngakho-ke kufanele ajovwe. Isiphetho singasethwa kumephu yokumisa edalwe i-AMQ Online, ngakho-ke sizoyichaza ngokuhlukahluka kwemvelo ku-manifest yohlelo lokusebenza:
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
Imininingwane
Ithokheni ye-akhawunti yesevisi ingasetshenziswa ukuze kugunyazwe uhlelo lwethu lokusebenza ku-OpenShift. Ukwenza lokhu, kufanele uqale udale i-ConfigSource yangokwezifiso ezofunda ithokheni yokuqinisekisa ohlelweni lwefayela le-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);
}
}
Yakha futhi Sebenzisa Isicelo
Njengoba uhlelo lokusebenza kufanele luhlanganiswe lube ifayela elisebenzisekayo, umshini obonakalayo we-GraalVM uyadingeka. Ukuze uthole imininingwane yokuthi ungasetha kanjani indawo yalokhu, bheka imiyalelo ehambisanayo ku
Ngemuva kwalokho, ngokulandela imiyalo enikezwe lapho, udinga ukulanda umthombo, wakhe futhi usebenzise uhlelo lwethu lokusebenza:
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
Ngemva kwale miyalo, uhlelo lokusebenza luzosetshenziswa, kodwa ngeke luqale size silungise izinsiza zemiyalezo esizidingayo ku-AMQ Online.
Ukusetha isistimu yemiyalezo
Manje osekusele wukusetha izinsiza ezidingwa uhlelo lwethu lokusebenza kusistimu yemiyalezo. Ukuze wenze lokhu, udinga ukudala: 1) indawo yekheli ukuze uqalise indawo yokugcina yesistimu yemiyalezo; 2) ikheli lokumisa amakheli esiwasebenzisa kuhlelo lokusebenza; 3) Umsebenzisi wokuthumela imiyalezo ukusetha izifakazelo zeklayenti.
Indawo yekheli
Into ye-AddressSpace ku-AMQ Online iyiqembu lamakheli abelana ngeziphetho zokuxhuma kanye nezinqubomgomo zokuqinisekisa nokugunyazwa. Uma udala isikhala sekheli, ungacacisa ukuthi iziphetho zemilayezo zizovezwa kanjani:
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
Amakheli
Amakheli asetshenziselwa ukuthumela nokwamukela imilayezo. Ikheli ngalinye linohlobo, olunquma i-semantics yalo, kanye nohlelo, olucacisa inani lezinsiza okufanele zigcinwe. Ikheli linganqunywa, isibonelo, kanje:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Umsebenzisi womlayezo
Ukuqinisekisa ukuthi izinhlelo zokusebenza ezithenjwayo kuphela ezingathumela futhi zamukele imilayezo kumakheli akho, kufanele udale umsebenzisi ohlelweni lokuthumela imiyalezo. Kuzinhlelo zokusebenza ezisebenza kuqoqo, amaklayenti angagunyazwa kusetshenziswa i-akhawunti yesevisi ye-OpenShift. Umsebenzisi "i-akhawunti yesevisi" ingachazwa, isibonelo, kanje:
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"]
Izimvume zokumisa uhlelo lokusebenza
Ukuze i-AMQ Online idale i-configmap esiyisebenzisele ukushumeka imininingwane yephoyinti lokugcina le-AMQP, Indima kanye ne-RoleBinding kufanele isethwe:
---
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
Isetshenziswa kanjani ukucupha
Ungasebenzisa ukucushwa kwesistimu yemiyalezo kanje:
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
Ukuqinisekiswa kohlelo lokusebenza
Ukuqinisekisa ukuthi uhlelo lokusebenza luqalile, okokuqala, ake sihlole ukuthi amakheli ahambisanayo adaliwe yini futhi ayasebenza:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Bese sihlola i-URL yomzila wohlelo lokusebenza (vele uvule leli kheli esipheqululini):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Isiphequluli kufanele sibonise ukuthi amathikithi abuyekezwa ngezikhathi ezithile njengoba imilayezo ithunyelwa futhi yamukelwe yi-AMQ Online.
Ukufingqa
Ngakho-ke sibhale uhlelo lwe-Quarkus olusebenzisa i-AMQP yokuthumela imiyalezo, salungisa uhlelo lokusebenza ukuthi lusebenze kuplathifomu ye-Red Hat OpenShift, futhi sasebenzisa ukucushwa kwayo okusekelwe ekucushweni kwe-AMQ Online. Sibe sesidala ama-manifest adingekayo ukuze siqalise isistimu yemiyalezo yohlelo lwethu lokusebenza.
Lokhu kuphetha uchungechunge olumayelana neQuarkus, kodwa kunezinto eziningi ezintsha nezithokozisayo ezizayo, hlala ubukele!
Source: www.habr.com