Lumelang bohle! Ke ena - poso ea rona ea ho qetela letotong la Quarkus! (Ka tsela, shebella webinar ea rona
В
Ho tloha ka mofuta oa 0.17.0,
Ho nahanoa hore o se o kentse AMQ Online sethaleng sa OpenShift (haeba ho se joalo, bona
Ho qala, re tla theha ts'ebeliso ea Quarkus e tla ba sistimi e bonolo ea ts'ebetso ea odara re sebelisa melaetsa e sebetsang. Sesebelisoa sena se tla kenyelletsa jenereithara ea odara e romellang liodara moleng oa melaetsa ka nako e behiloeng, hammoho le processor ea odara e tla sebetsana le melaetsa e tsoang moleng le ho hlahisa linetefatso tse bonoang ho sebatli.
Ha re se re thehile sesebelisoa, re tla u bontša mokhoa oa ho kenya tlhophiso ea sistimi ea melaetsa ts'ebelisong le ho sebelisa AMQ Online ho fana ka lisebelisoa tseo re li hlokang ho sistimi.
Sesebelisoa sa Quarkus
Sesebelisoa sa rona sa Quarkus se sebetsa ho OpenShift mme ke mofuta o fetotsoeng oa lenaneo
Laela jenereithara
Jenereithara e romella feela li-ID tse ntseng li hola ho aterese ea "litaelo" metsotsoana e meng le e meng e 5.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Odara processor
Sesebelisoa sa odara se bonolo le ho feta, se khutlisetsa ID ea netefatso atereseng ea "litiiso".
@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;
}
}
Lisebelisoa tsa Tiiso
Mohloli oa netefatso ke pheletso ea HTTP bakeng sa ho thathamisa linetefatso tse hlahisoang ke ts'ebeliso ea rona.
@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;
}
}
phetoho
Ho hokela ho AMQ Online, ts'ebeliso ea rona e tla hloka data ea tlhophiso, e leng: Tlhophiso ea sehokelo sa Quarkus, tlhaiso-leseling ea AMQP le lintlha tsa bareki. Ha e le hantle, ho molemo ho boloka lintlha tsohle tsa tlhophiso sebakeng se le seng, empa re tla li arola ka boomo ho bontša mekhoa e ka khonehang ea ho lokisa ts'ebeliso ea Quarkus.
Lihokelo
Tlhophiso ea sehokelo e ka fanoa ka nako ea ho kopanya ho sebelisoa faele ea thepa ea kopo:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Ho boloka lintho li le bonolo, re tla sebelisa feela mola oa melaetsa bakeng sa aterese ea "liodara". 'Me aterese ea "litiiso" ts'ebelisong ea rona e tla sebelisa mokoloko mohopolong.
Qeto ea AMQP
Ka nako ea ho bokella, lebitso la moamoheli le nomoro ea boema-kepe bakeng sa pheletso ea AMQP ha e tsejoe, kahoo li tlameha ho entoa. Qetello e ka beoa ho configmap e entsoeng ke AMQ Online, kahoo re tla e hlalosa ka mefuta e fapaneng ea tikoloho ho pontšo ea kopo:
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
Lintlha tsa bopaki
Letšoao la ak'haonte ea litšebeletso le ka sebelisoa ho netefatsa kopo ea rona ho OpenShift. Ho etsa sena, o tlameha ho qala ka ho theha ConfigSource e tloaelehileng e tla bala lets'oao la netefatso ho tsoa ho sistimi ea faele ea 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);
}
}
Theha le ho Beha Sesebelisoa
Kaha kopo e tlameha ho bokelloa hore e be faele e ka sebetsoang, mochini o sebetsang oa GraalVM oa hlokahala. Bakeng sa lintlha tse mabapi le mokhoa oa ho theha tikoloho bakeng sa sena, bona litaelo tse tsamaellanang ho
Ebe, ho latela litaelo tse fanoeng moo, o hloka ho khoasolla mohloli, ho aha le ho tsamaisa ts'ebeliso ea rona:
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
Ka mor'a litaelo tsena, kopo e tla romelloa, empa e ke ke ea qala ho fihlela re lokisa lisebelisoa tsa melaetsa tseo re li hlokang ho AMQ Online.
Ho theha tsamaiso ea melaetsa
Hona joale ho setseng ke ho beha lisebelisoa tseo kopo ea rona e li hlokang tsamaisong ea melaetsa. Ho etsa sena, o hloka ho theha: 1) sebaka sa aterese ho qala pheletso ea sistimi ea melaetsa; 2) aterese ho hlophisa liaterese tseo re li sebelisang ts'ebelisong; 3) Mosebelisi oa melaetsa ho beha lintlha tsa bareki.
Sebaka sa aterese
Ntho ea AddressSpace ho AMQ Online ke sehlopha sa liaterese tse arolelanang lintlha tsa khokahano le maano a netefatso le tumello. Ha o theha sebaka sa aterese, o ka hlakisa hore na li-endpoints tsa melaetsa li tla pepesoa joang:
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
Li-aterese
Liaterese li sebelisoa ho romella le ho amohela melaetsa. Aterese ka 'ngoe e na le mofuta, o khethollang semantics ea eona, hammoho le moralo, o hlalosang palo ea lisebelisoa tse lokelang ho bolokoa. Aterese e ka khethoa, mohlala, joalo ka:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Mosebelisi oa melaetsa
Ho netefatsa hore ke lits'ebetso tse tšepahalang feela tse ka romellang le ho amohela melaetsa ho liaterese tsa hau, u tlameha ho theha mosebelisi ho sistimi ea melaetsa. Bakeng sa lits'ebetso tse sebetsang ho sehlopha, bareki ba ka netefatsoa ba sebelisa ak'haonte ea tšebeletso ea OpenShift. Mosebelisi "account account" e ka hlalosoa, mohlala, joalo ka:
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"]
Litumello tsa ho lokisa sesebelisoa
E le hore AMQ Online e ka etsa configmap eo re e sebelisitseng ho kenya lintlha tsa AMQP tsa pheletso, Role le RoleBinding li tlameha ho hlophisoa:
---
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
Mokhoa oa ho sebelisa litlhophiso
U ka sebelisa tlhophiso ea sistimi ea melaetsa joalo ka:
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
Netefatso ya kopo
Ho etsa bonnete ba hore ts'ebeliso e se e qalile, pele ho tsohle, a re hlahlobeng hore na liaterese tse tsamaellanang li entsoe le hore lia sebetsa:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Joale ha re hlahlobeng URL ea tsela ea ts'ebeliso ( bula aterese ena ho sebatli):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Sebatli se lokela ho bonts'a hore litekete li ntlafatsoa nako le nako ha melaetsa e romelloa le ho amoheloa ke AMQ Online.
Ho akaretsa
Kahoo re ngotse kopo ea Quarkus e sebelisang AMQP bakeng sa melaetsa, re lokiselitse kopo hore e sebetse sethaleng sa Red Hat OpenShift, 'me ra kenya ts'ebetsong tlhophiso ea eona e thehiloeng ho AMQ Online tlhophiso. Ka mor'a moo re thehile li-manifest tse hlokahalang ho qala tsamaiso ea melaetsa bakeng sa ts'ebeliso ea rona.
Sena se phethela letoto le mabapi le Quarkus, empa ho na le lintho tse ngata tse ncha le tse khahlisang tse tlang, lula u mametse!
Source: www.habr.com