Sannu duka! Ga shi - post ɗinmu na ƙarshe a cikin jerin Quarkus! (Af, kalli webinar mu
В
Tun daga sigar 0.17.0,
Ana ɗauka cewa kun riga kun tura AMQ Online akan dandalin OpenShift (idan ba haka ba, to duba
Don farawa, za mu ƙirƙiri aikace-aikacen Quarkus wanda zai zama tsarin sarrafa tsari mai sauƙi ta amfani da saƙon amsawa. Wannan aikace-aikacen zai ƙunshi janareta na oda wanda ke aika oda zuwa layin saƙo a ƙayyadaddun tazara, da kuma na'ura mai sarrafa oda wanda zai sarrafa saƙon daga layin kuma ya samar da tabbacin da za a iya gani a cikin mashigar.
Da zarar mun ƙirƙiri aikace-aikacen, za mu nuna muku yadda ake shigar da tsarin tsarin saƙo a cikin aikace-aikacen kuma amfani da AMQ Online don samar da albarkatun da muke buƙata akan tsarin.
Quarkus app
Aikace-aikacen mu na Quarkus yana gudana akan OpenShift kuma ingantaccen sigar shirin ne
Oda janareta
Janareta kawai yana aika ID ɗin oda mai girma zuwa adireshin “oda” kowane sakan 5.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
Mai sarrafa oda
Mai sarrafa oda ya fi sauƙi, kawai yana mayar da ID na tabbatarwa zuwa adireshin "tabbatacce".
@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;
}
}
Abubuwan Tabbatarwa
Tushen tabbatarwa shine ƙarshen HTTP don jera abubuwan tabbatarwa ta aikace-aikacenmu.
@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;
}
}
gyara
Don haɗi zuwa AMQ akan layi, aikace-aikacen mu zai buƙaci wasu bayanan daidaitawa, wato: Ƙirar haɗin haɗin Quarkus, bayanan ƙarshen AMQP da takaddun shaidar abokin ciniki. Yana da, ba shakka, mafi kyau a ajiye duk bayanan sanyi a wuri ɗaya, amma za mu raba su da gangan don nuna yiwuwar zaɓuɓɓuka don daidaita aikace-aikacen Quarkus.
Masu haɗawa
Ana iya samar da tsarin haɗin haɗin kai a lokacin tattarawa ta amfani da fayil ɗin kaddarorin aikace-aikacen:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
Don sauƙaƙe abubuwa, za mu yi amfani da layin saƙo kawai don adireshin "umarni". Kuma adireshin "tabbatattun" a cikin aikace-aikacen mu zai yi amfani da layi a cikin ƙwaƙwalwar ajiya.
AMQP karshen
A lokacin tattarawa, sunan mai masauki da lambar tashar jiragen ruwa don ƙarshen AMQP ba a san su ba, don haka dole ne a yi musu allura. Za a iya saita ƙarshen ƙarshen a cikin taswirar saiti wanda AMQ Online ya ƙirƙira, don haka za mu ayyana su ta hanyar masu canjin yanayi a cikin bayanan aikace-aikacen:
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
Takaddun shaida
Ana iya amfani da alamar asusun sabis don tabbatar da aikace-aikacen mu zuwa OpenShift. Don yin wannan, dole ne ka fara ƙirƙirar ConfigSource na al'ada wanda zai karanta alamar tabbatarwa daga tsarin fayil ɗin pods:
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);
}
}
Gina kuma Sanya Aikace-aikacen
Tunda dole ne a haɗa aikace-aikacen cikin fayil ɗin da za a iya aiwatarwa, ana buƙatar injin kama-da-wane na GraalVM. Don cikakkun bayanai kan yadda ake saita yanayi don wannan, duba umarni masu dacewa a ciki
Bayan haka, bin umarnin da aka bayar a wurin, kuna buƙatar zazzage tushen, ginawa da tura aikace-aikacen mu:
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
Bayan waɗannan umarni, za a tura aikace-aikacen, amma ba za a fara ba har sai mun saita albarkatun saƙon da muke buƙata a AMQ Online.
Saita tsarin saƙon
Yanzu abin da ya rage shine saita albarkatun da aikace-aikacenmu ke buƙata a cikin tsarin saƙon. Don yin wannan, kuna buƙatar ƙirƙirar: 1) sararin adireshi don fara ƙarshen tsarin saƙon; 2) adireshin don daidaita adiresoshin da muke amfani da su a cikin aikace-aikacen; 3) Mai amfani da saƙo don saita bayanan abokin ciniki.
Wurin adireshi
Abun AddressSpace a cikin AMQ Online rukuni ne na adiresoshin da ke raba maƙasudin ƙarshen haɗin gwiwa da tabbatarwa da manufofin izini. Lokacin da ka ƙirƙiri sararin adireshi, za ka iya ƙayyade yadda za a fallasa wuraren ƙarshen saƙo:
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
Adireshin
Ana amfani da adireshi don aikawa da karɓar saƙonni. Kowane adireshi yana da nau'i, wanda ke ƙayyade ma'anarsa, da kuma tsari, wanda ke ƙayyade adadin albarkatun da za a adana. Ana iya tantance adireshin, misali, kamar haka:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
Mai amfani da saƙo
Don tabbatar da cewa amintattun aikace-aikace ne kawai za su iya aikawa da karɓar saƙonni zuwa adiresoshin ku, dole ne ku ƙirƙiri mai amfani a cikin tsarin saƙon. Don aikace-aikacen da ke gudana akan gungu, ana iya tantance abokan ciniki ta amfani da asusun sabis na OpenShift. Ana iya ayyana "account ɗin sabis" mai amfani, misali, kamar haka:
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"]
Izinin saita aikace-aikacen
Domin AMQ Online ya ƙirƙiri taswirar tsarin da muka yi amfani da shi don shigar da bayanan ƙarshen AMQP, Role da RoleBinding dole ne a saita:
---
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
Yadda ake amfani da saitunan
Kuna iya amfani da tsarin tsarin saƙo kamar haka:
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
Tabbatar da aikace-aikacen
Don tabbatar da cewa aikace-aikacen ya fara, da farko, bari mu bincika ko an ƙirƙiri adireshin daidai kuma suna aiki:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
Sannan bari mu duba hanyar aikace-aikacen URL (kawai buɗe wannan adireshin a cikin mai binciken):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
Mai binciken ya kamata ya nuna cewa ana sabunta tikiti lokaci-lokaci kamar yadda ake aika saƙonni da karɓa ta AMQ Online.
Girgawa sama
Don haka mun rubuta aikace-aikacen Quarkus wanda ke amfani da AMQP don aika saƙon, saita aikace-aikacen don aiki akan dandamalin Red Hat OpenShift, kuma mun aiwatar da tsarin sa bisa tsarin AMQ akan layi. Sannan mun ƙirƙiri bayanan da ake buƙata don fara tsarin saƙon aikace-aikacen mu.
Wannan ya ƙare jerin game da Quarkus, amma akwai sababbin abubuwa masu ban sha'awa da yawa a gaba, zauna a hankali!
source: www.habr.com