Bawo ni gbogbo eniyan! Eyi ni - ifiweranṣẹ ikẹhin wa ninu jara Quarkus! (Ni ọna, wo webinar wa
В
Lati ẹya 0.17.0,
O ti ro pe o ti ran AMQ Online sori ẹrọ OpenShift (ti kii ba ṣe bẹ, lẹhinna wo
Lati bẹrẹ, a yoo ṣẹda ohun elo Quarkus kan ti yoo jẹ eto sisẹ aṣẹ ti o rọrun nipa lilo fifiranṣẹ ifaseyin. Ohun elo yii yoo pẹlu olupilẹṣẹ aṣẹ ti o fi awọn aṣẹ ranṣẹ si isinyi ifiranṣẹ ni aarin aarin, bakanna bi ero isise aṣẹ ti yoo ṣe ilana awọn ifiranṣẹ lati isinyi ati ṣe agbekalẹ awọn ijẹrisi wiwo ni ẹrọ aṣawakiri.
Ni kete ti a ti ṣẹda ohun elo naa, a yoo fihan ọ bi o ṣe le fi sabe atunto eto fifiranṣẹ sinu ohun elo naa ki o lo AMQ Online lati pese awọn orisun ti a nilo lori eto naa.
Quarkus app
Ohun elo Quarkus wa nṣiṣẹ lori OpenShift ati pe o jẹ ẹya ti a ṣe atunṣe ti eto naa
Olupilẹṣẹ ibere
Olupilẹṣẹ naa ni ẹyọkan firanṣẹ awọn ID aṣẹ ti ndagba si adirẹsi “awọn aṣẹ” ni gbogbo iṣẹju-aaya 5.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Bere fun isise
Olutọju aṣẹ paapaa rọrun, o kan da ID idaniloju pada si adirẹsi “awọn ijẹrisi”.
@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;
}
}
Ìmúdájú Resources
Awọn orisun ìmúdájú jẹ aaye ipari HTTP fun kikojọ awọn ijẹrisi ti ipilẹṣẹ nipasẹ ohun elo wa.
@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;
}
}
Ṣe akanṣe
Lati sopọ si AMQ Online, ohun elo wa yoo nilo data atunto diẹ, eyun: Iṣeto asopọ asopọ Quarkus, alaye ipari AMQP ati awọn ẹri alabara. O jẹ, nitorinaa, dara julọ lati tọju gbogbo data iṣeto ni aaye kan, ṣugbọn a yoo mọọmọ ya wọn lati ṣafihan awọn aṣayan ti o ṣeeṣe fun atunto ohun elo Quarkus.
Awọn asopọ
Iṣeto asopo ni a le pese ni akoko akopọ nipa lilo faili ohun-ini ohun elo kan:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Lati jẹ ki awọn nkan rọrun, a yoo lo isinyi ifiranṣẹ nikan fun adirẹsi “awọn aṣẹ”. Ati adirẹsi “awọn ijẹrisi” ninu ohun elo wa yoo lo isinyi ni iranti.
AMQP ipari
Ni akoko akojọpọ, orukọ olupin ati nọmba ibudo fun aaye ipari AMQP jẹ aimọ, nitorinaa wọn gbọdọ jẹ itasi. O le ṣeto aaye ipari ni atunto atunto ti o ṣẹda nipasẹ AMQ Online, nitorinaa a yoo ṣalaye wọn nipasẹ awọn oniyipada ayika ni iṣafihan ohun elo:
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
Awọn iwe eri
Aami akọọlẹ iṣẹ le ṣee lo lati jẹri ohun elo wa si OpenShift. Lati ṣe eyi, o gbọdọ kọkọ ṣẹda aṣa aṣa ConfigSource ti yoo ka ami ìfàṣẹsí lati inu eto faili podu naa:
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);
}
}
Kọ ati Mu Ohun elo naa ṣiṣẹ
Niwọn igba ti ohun elo naa gbọdọ ṣe akopọ sinu faili ti o le ṣiṣẹ, ẹrọ foju GraalVM kan nilo. Fun awọn alaye lori bi o ṣe le ṣeto agbegbe kan fun eyi, wo awọn ilana ti o baamu ninu
Lẹhinna, ni atẹle awọn itọnisọna ti a fun nibẹ, o nilo lati ṣe igbasilẹ orisun, kọ ati mu ohun elo wa:
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
Lẹhin awọn aṣẹ wọnyi, ohun elo naa yoo gbe lọ, ṣugbọn kii yoo bẹrẹ titi ti a fi tunto awọn orisun fifiranṣẹ ti a nilo ni AMQ Online.
Ṣiṣeto eto fifiranṣẹ
Bayi gbogbo ohun ti o ku ni lati ṣeto awọn orisun ti ohun elo wa nilo ninu eto fifiranṣẹ. Lati ṣe eyi, o nilo lati ṣẹda: 1) aaye adirẹsi kan lati bẹrẹ aaye ipari eto fifiranṣẹ; 2) adirẹsi lati tunto awọn adirẹsi ti a lo ninu awọn ohun elo; 3) Olumulo fifiranṣẹ lati ṣeto awọn iwe-ẹri alabara.
Aaye adirẹsi
Ohun AdirẹsiSpace kan ni AMQ Online jẹ akojọpọ awọn adirẹsi ti o pin awọn aaye ipari asopọ ati ijẹrisi ati awọn ilana aṣẹ. Nigbati o ba ṣẹda aaye adirẹsi, o le pato bi awọn aaye ipari fifiranṣẹ yoo ṣe han:
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
.Еса
Awọn adirẹsi ni a lo lati firanṣẹ ati gba awọn ifiranṣẹ wọle. Adirẹsi kọọkan ni iru kan, eyiti o pinnu awọn atunmọ rẹ, bakanna bi ero kan, eyiti o ṣalaye nọmba awọn orisun lati wa ni ipamọ. Adirẹsi naa le pinnu, fun apẹẹrẹ, bii eyi:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Olumulo fifiranṣẹ
Lati rii daju pe awọn ohun elo ti o gbẹkẹle nikan le firanṣẹ ati gba awọn ifiranṣẹ si awọn adirẹsi rẹ, o gbọdọ ṣẹda olumulo kan ninu eto fifiranṣẹ. Fun awọn ohun elo ti n ṣiṣẹ lori iṣupọ kan, awọn alabara le jẹ ijẹrisi nipa lilo akọọlẹ iṣẹ OpenShift kan. Olumulo "account service" le jẹ asọye, fun apẹẹrẹ, bii eyi:
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"]
Awọn igbanilaaye lati tunto ohun elo naa
Ni ibere fun AMQ Online lati ṣẹda iṣeto atunto ti a lo lati fi sabe alaye ipari AMQP, Ipa ati RoleBinding gbọdọ ṣeto:
---
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
Bi o ṣe le lo awọn atunto
O le lo iṣeto ni eto fifiranṣẹ bi eleyi:
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
Ohun elo ijerisi
Lati rii daju pe ohun elo naa ti bẹrẹ, ni akọkọ, jẹ ki a ṣayẹwo boya awọn adirẹsi ti o baamu ti ṣẹda ati pe wọn ṣiṣẹ:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Lẹhinna jẹ ki a ṣayẹwo URL ipa ọna ohun elo (kan ṣii adirẹsi yii ni ẹrọ aṣawakiri):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Ẹrọ aṣawakiri yẹ ki o fihan pe awọn tikẹti ti ni imudojuiwọn lorekore bi awọn ifiranṣẹ ti firanṣẹ ati gba nipasẹ AMQ Online.
Summing soke
Nitorinaa a kowe ohun elo Quarkus kan ti o lo AMQP fun fifiranṣẹ, tunto ohun elo lati ṣiṣẹ lori pẹpẹ Red Hat OpenShift, ati imuse iṣeto ni ti o da lori iṣeto AMQ Online. Lẹhinna a ṣẹda awọn ifihan ti o nilo lati ṣe ipilẹṣẹ eto fifiranṣẹ fun ohun elo wa.
Eleyi pari awọn jara nipa Quarkus, ṣugbọn nibẹ ni a pupo ti titun ati ki o awon ohun niwaju, duro aifwy!
orisun: www.habr.com