Salama daholo! Ity ary - ny lahatsoratray farany amin'ny andiany Quarkus! (Raha ny marina, jereo ny webinar anay . Hasehonay anao ny fomba hanombohana na hamindra vahaolana efa vita)

В Amin'ity lahatsoratra ity dia nijery ireo fitaovana mifandraika izahay izay azo ampiasaina hamaritana ny fanatsarana azo vokatry ny fanavaozana ny rindranasa Java.
Hatramin'ny version 0.17.0, manohana ny fampiasana ny Advanced Message Queuing Protocol (), izay fenitra misokatra amin'ny fandefasana hafatra momba ny raharaham-barotra eo amin'ny fampiharana na fikambanana.
dia serivisy natsangana amin'ny alàlan'ny tetikasa open source ary fampiharana rafitra fandefasana hafatra mifototra amin'ny sehatra . Raha mila fanazavana fanampiny momba ny fomba fiasa dia jereo . Androany dia hasehontsika anao ny fomba fampifangaroana ny AMQ Online sy ny Quarkus mba hananganana rafitra fandefasana hafatra maoderina mifototra amin'ny OpenShift amin'ny fampiasana teknolojia fandefasana hafatra vaovao roa.
Heverina fa efa nametraka AMQ Online amin'ny sehatra OpenShift ianao (raha tsy izany dia jereo ).
Hanombohana dia hamorona fampiharana Quarkus izay rafitra fanodinana baiko tsotra amin'ny alàlan'ny hafatra mihetsika. Ity fampiharana ity dia ahitana mpamokatra baiko izay mandefa baiko amin'ny filaharana hafatra amin'ny elanelam-potoana voafaritra, ary koa processeur baiko izay handrindra ny hafatra avy amin'ny filaharana ary miteraka fanamafisana azo jerena ao amin'ny navigateur.
Rehefa avy namorona ny rindranasa izahay, dia hasehonay anao ny fomba hampidirana ny rafitry ny fandefasana hafatra ao anatin'ilay rindranasa ary hampiasainay ny AMQ Online mba hanomezana ireo loharano ilaintsika amin'ny rafitra.
Quarkus app
Ny fampiharana Quarkus dia mandeha amin'ny OpenShift ary kinova novaina amin'ny programa . Ohatra feno amin'ny lafiny mpanjifa dia azo jerena .
Mpamorona baiko
Ny mpamokatra dia mandefa karapanondrom-pilaminana mitombo hatrany amin'ny adiresy "baiko" isaky ny 5 segondra.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Mpanodina baiko
Ny mpandrindra ny baiko dia tsotra kokoa, mamerina ID fanamafisana amin'ny adiresy "confirmations".
@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;
}
}
Loharanon'ny fanamafisana
Ny loharanon'ny fanamafisana dia teboka faran'ny HTTP amin'ny fitanisana ireo fanamafisana novokarin'ny fampiharanay.
@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;
}
}
fanitsiana
Raha te hifandray amin'ny AMQ Online dia mila angon-drakitra fanamafisana vitsivitsy ny fampiharana ataontsika, dia ny: Configuration connexion Quarkus, fampahalalana momba ny endpoint AMQP ary ny mombamomba ny mpanjifa. Mazava ho azy fa tsara kokoa ny mitazona ny angon-drakitra fanamafisana rehetra amin'ny toerana iray, fa inianay hanasaraka azy ireo hanehoana ny safidy azo atao amin'ny fametrahana ny fampiharana Quarkus.
Connectors
Azo atolotra amin'ny fotoana fanangonana amin'ny alàlan'ny rakitra fananana fampiharana:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Mba hitazonana ny zavatra tsotra dia milahatra hafatra ho an'ny adiresy "kaomandy" ihany no hampiasainay. Ary ny adiresy "fanamafisana" ao amin'ny fampiharana ataontsika dia hampiasa filaharana ho fahatsiarovana.
Ny fiovan'ny vidin'ny AMQP
Amin'ny fotoana fanangonana dia tsy fantatra ny anaran'ny mpampiantrano sy ny laharan'ny seranan-tsambo ho an'ny teboka AMQP, ka tsy maintsy ampidirina izy ireo. Ny teboka farany dia azo apetraka ao amin'ny configmap izay noforonin'ny AMQ Online, noho izany dia hamaritra azy ireo amin'ny alàlan'ny fari-piainan'ny tontolo iainana ao amin'ny fanehoana fampiharana:
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
Syndicate
Ny mari-pamantarana kaonty serivisy dia azo ampiasaina hanamarinana ny fampiharana amin'ny OpenShift. Mba hanaovana izany dia tsy maintsy mamorona ConfigSource mahazatra ianao izay hamaky ny mari-pamantarana fanamarinana avy amin'ny rafitry ny rakitra 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);
}
}
Amboary sy apetraho ny fampiharana
Koa satria tsy maintsy atambatra ao anaty rakitra azo tanterahana ny fampiharana, dia ilaina ny milina virtoaly GraalVM. Raha mila fanazavana fanampiny momba ny fomba fananganana tontolo iray ho an'izany dia jereo ny toromarika mifandraika amin'izany .
Avy eo, manaraka ny toromarika omena ao, mila misintona ny loharano ianao, manangana ary mametraka ny fampiharana:
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
Aorian'ireo baiko ireo dia hapetraka ny fampiharana, saingy tsy hanomboka raha tsy amboarina ny loharanon-kafatra ilaintsika ao amin'ny AMQ Online.
Fametrahana ny rafitra fandefasana hafatra
Ny hany sisa tavela dia ny fametrahana ny loharanon-karena ilain'ny fampiharana ao amin'ny rafitra fandefasana hafatra. Mba hanaovana izany dia mila mamorona ianao: 1) toerana misy adiresy hanombohana ny teboka farany amin'ny rafitra fandefasana hafatra; 2) adiresy handrindrana ny adiresy ampiasainay amin'ny fampiharana; 3) Mpampiasa hafatra hametraka ny fahazoan-dàlana ho an'ny mpanjifa.
Adiresy toerana
Ny zavatra AddressSpace ao amin'ny AMQ Online dia vondron'ny adiresin'ny mizara ireo teboka farany amin'ny fifandraisana sy ny politikan'ny fanamarinana ary ny fanomezan-dàlana. Rehefa mamorona habaka adiresy ianao dia azonao atao ny mamaritra ny fomba hisehoan'ny teboka farany amin'ny hafatra:
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
adiresy
Ny adiresy dia ampiasaina handefasana sy handraisana hafatra. Ny adiresy tsirairay dia manana karazana, izay mamaritra ny semantika, ary koa ny drafitra, izay mamaritra ny isan'ny loharanon-karena hatokana. Ny adiresy dia azo faritana, ohatra, toy izao:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Mpampiasa hafatra
Mba hahazoana antoka fa ny fampiharana azo itokisana ihany no afaka mandefa sy mandray hafatra amin'ny adiresinao, dia tsy maintsy mamorona mpampiasa iray ao amin'ny rafitra fandefasana hafatra ianao. Ho an'ny rindranasa mandeha amin'ny cluster, azo amarinina amin'ny alàlan'ny kaonty serivisy OpenShift ny mpanjifa. Ny mpampiasa "serviceaccount" dia azo faritana, ohatra, toy izao:
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"]
Fanomezana alalana hanitsy ny fampiharana
Mba hahafahan'ny AMQ Online mamorona ny configmap izay nampiasanay mba hampidirana ny mombamomba ny teboka AMQP dia tsy maintsy apetraka ny Role sy 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
Ahoana ny fampiharana configurations
Azonao atao ny mampihatra ny fandrindrana ny rafitra fandefasana hafatra toy izao:
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
Fanamarinana ny fampiharana
Mba hahazoana antoka fa natomboka ny fampiharana, dia jereo aloha raha efa noforonina sy mavitrika ireo adiresy mifanaraka aminy:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Avy eo, andeha hojerentsika ny URL lalana fampiharana (sokafao fotsiny ity adiresy ity amin'ny navigateur):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Ny navigateur dia tokony hampiseho fa ny tapakila dia havaozina tsindraindray rehefa alefa sy voarain'ny AMQ Online ny hafatra.
Famintinana
Noho izany dia nanoratra fampiharana Quarkus izahay izay mampiasa AMQP ho an'ny fandefasana hafatra, nanamboatra ny rindranasa hihazakazaka amin'ny sehatra Red Hat OpenShift, ary nampihatra ny fandrindrana mifototra amin'ny konfigurasi AMQ Online. Avy eo izahay dia namorona ny fanehoana ilaina mba hanombohana ny rafitra fandefasana hafatra ho an'ny fampiharana.
Io no mamarana ny andian-tantara momba ny Quarkus, fa misy zava-baovao sy mahaliana maro ho avy, araho hatrany!
Source: www.habr.com
