Hi omnes! Hic est - nostrum extremum in serie Quarkus! (Viam nostram vigilate webinar
Π
Cum versione 0.17.0;
Ponitur te iam AMQ Online in OpenShift destruxit suggestum (si non, vide
Committitur, applicationem Quarkus creabimus quae simplex erit ordo processus systematis utendi reactivum nuntius. Haec applicatio ordinem generantis comprehendet qui ordines ad nuntium queue certo intervallo mittit, itemque processus ordo qui nuntios a queue et confirmationes in navigatro spectabiles generabit.
Cum applicationem creavimus, ostendemus vobis quomodo conformationem systematis nuntiandi in applicatione et AMQ Online usum adhibeamus ad providendum facultates quae in systemate egent.
Quarkus app
Noster Quarkus applicationem decurrit in OpenShift et mutatio versionis progressionis
Ordo generantis
Generator simpliciter monotonice ordinem IDs crescentem mittit ad "iussos" singulas 5 seconds electronicas.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Ordo Processor
Ordo tracto simplicior est, hoc modo confirmationem ID reddit ad "confirmationes" electronicas.
@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;
}
}
Confirmatio Resources
Subsidium confirmationis HTTP est terminus ad enumerandas confirmationes ab applicatione nostra generatas.
@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;
}
}
tionibus
Coniungere ad AMQ Online, applicatio nostra aliqua notitia conformationis indigebit, nempe: Quarkus iungo configurationem, AMQP terminus notitiarum et documentorum clientium. Melius quidem est ut omnes notitias conformationis in uno loco contineant, sed consulto eas separabimus ut optiones possibilis pro applicatione Quarkus figurandi ostendant.
Connectors
Conector configurationem praeberi potest ad tempus ordinandi utens tabella proprietatum applicationis:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Ad simplicia custodienda, tantum nuntium queue pro inscriptione "iussus" adhibebimus. Et inscriptionis "confirmationes" in nostra applicatione queue in memoria adhibebit.
AMQP endpoint
In tempore compilare, hostname et numerus portus pro AMQP terminus ignoti sunt, ideo injicienda sunt. Finis constitui potest in configmap quod per AMQ Online creatum est, sic eas per variabiles ambitus in applicatione manifesta definiemus;
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
Documentorum
Ministerium rationis tessera adhiberi potest ad applicationem ad OpenShift signo authenticitatis munito. Ad hoc faciendum, debes primum consuetudinem Mando, quae authenticas documentum e fasciculi systematis vasculi leget;
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);
}
}
Aedificare et explica Applicationem
Cum applicatio in documentum exsecutabile componi debet, machina virtualis GraalVM requiritur. Singula enim quomodo ambitum huius rei constituant, instructiones correspondentes vide in
Deinde, iuxta mandata ibi data, fontem quaere, nostram applicationem aedifica et explica;
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
Post haec mandata applicatio explicabitur, sed non incipiet donec facultates nuntiis in AMQ Online configurare debeamus.
Erexit quantitatem ratio
Nunc omne reliquum est, ut facultates quas applicatio nostra in systemate nuntiando indigeat. Ad hoc efficiendum opus est: 1) spatium inscriptionis initiali ad systema nuntiandi designandum; 2) oratio configurare inscriptiones in applicatione utimur; III) Nuntius user ad clientem documentorum.
Oratio spatium
Objectum AddressSpace in AMQ Online est coetus inscriptionum quae connexionem habent terminos et authenticas et auctoritatis agendi rationes. Cum spatium electronicum creas, exprimere potes quomodo fines nuntii patebunt:
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
oratio
Inscriptiones ad nuntios mittere et accipere solebant. Quaeque oratio habet speciem, quae sua semantica determinat, tum consilium, quod determinat numerum facultatum reservandae. Inscriptio determinari potest, exempli gratia, hoc modo:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Nuntius user
Ut solum applicationes creditae nuntiis tuis inscriptionibus mittere ac recipere possint, debes usorem creare in systemate nuntiandi. Ad applicationes in botro currentes clientes authentice utentes rationem muneris OpenShift. Usoris "obsequium" definiri potest, exempli gratia, hoc modo:
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"]
Permissiones configurare in application
Ut pro AMQ Online ad configmapum creandum quod in AMQP designari consuevimus, munus et RoleBinding constituendae sunt:
---
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
Quomodo figurationes adhibere
Configurationis ratiocinationi applicari potes sic:
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
Applicationem verificationem
Fac ut applicatio incepit, ante omnia, inspiciamus num inscriptiones respondentes creatae sint et activae sint:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Deinde viam applicationis URL reprehendo (mox haec inscriptio in navigatro aperi);
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Navigatorium ostendere debet tesseras periodice renovatas esse cum nuntiis ab AMQ Online missis et recipiendis.
quoquo
Ita scripsimus applicationem Quarkus quae AMQP ad messingem adhibet, applicationem conformavit ad currendum in suggestu Rubro Hat OpenShift, et eius configurationem in AMQ Online configuratione implevit. Nos igitur manifestas necessitates creavimus ut systema nuntiandi ad nostram applicationem initialem perveniamus.
Hanc seriem de Quarkus concludit, sed multa nova et iucunda sunt antecedens, versatur!
Source: www.habr.com