အားလုံးမင်္ဂလာပါ! ဤသည်မှာ - Quarkus စီးရီးရှိ ကျွန်ုပ်တို့၏ နောက်ဆုံးစာဖြစ်ပါသည်။ (စကားမစပ်၊ ကျွန်ုပ်တို့၏ webinar ကိုကြည့်ပါ။
В
ဗားရှင်း 0.17.0 ကတည်းက၊
OpenShift ပလပ်ဖောင်းပေါ်တွင် AMQ Online ကို သင်အသုံးပြုထားပြီးဖြစ်သည်ဟု ယူဆပါသည် (မဟုတ်ပါက၊ ကြည့်ပါ။
စတင်ရန်အတွက်၊ ကျွန်ုပ်တို့သည် ဓာတ်ပြုမှုစာတိုပေးပို့ခြင်းကို အသုံးပြု၍ ရိုးရှင်းသော အမှာစာလုပ်ဆောင်ခြင်းစနစ်ဖြစ်သည့် Quarkus အပလီကေးရှင်းကို ဖန်တီးပါမည်။ ဤအပလီကေးရှင်းတွင် သတ်မှတ်ထားသောအချိန်အတွင်း မက်ဆေ့ချ်တန်းစီတစ်ခုသို့ အမှာစာများပေးပို့သည့် အမှာစာထုတ်ပေးသည့် ဂျင်နရေတာတစ်ခုအပြင် တန်းစီမှစာတိုများကိုလုပ်ဆောင်ပြီး ဘရောက်ဆာတွင်ကြည့်ရှုနိုင်သောအတည်ပြုချက်များကိုထုတ်ပေးမည့်အမိန့်ပရိုဆက်ဆာတစ်ခုပါ၀င်မည်ဖြစ်သည်။
ကျွန်ုပ်တို့သည် အပလီကေးရှင်းကို ဖန်တီးပြီးသည်နှင့်၊ ကျွန်ုပ်တို့သည် အပလီကေးရှင်းတွင် စာတိုပေးပို့ခြင်းစနစ် ဖွဲ့စည်းမှုပုံစံကို မည်သို့ထည့်သွင်းရမည်ကို သင့်အား ပြသမည်ဖြစ်ပြီး စနစ်တွင် ကျွန်ုပ်တို့လိုအပ်သောအရင်းအမြစ်များကို ပံ့ပိုးပေးရန်အတွက် AMQ Online ကို အသုံးပြုပါ။
Quarkus အက်ပ်
ကျွန်ုပ်တို့၏ Quarkus အပလီကေးရှင်းသည် OpenShift တွင်အလုပ်လုပ်ပြီး ပရိုဂရမ်၏မွမ်းမံထားသောဗားရှင်းတစ်ခုဖြစ်သည်။
အော်ဒါမီးစက်
မီးစက်သည် 5 စက္ကန့်တိုင်းတွင် "အမှာစာများ" လိပ်စာသို့ ကြီးထွားလာသော အမှာစာ ID များကို တိုတိုတုတ်တုတ်ဖြင့် ပို့ပေးပါသည်။
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
အော်ဒါ ပရိုဆက်ဆာ
အမှာစာကိုင်တွယ်သူသည် ပိုရိုးရှင်းသည်၊ ၎င်းသည် အတည်ပြုချက် ID ကို "အတည်ပြုချက်များ" လိပ်စာသို့ ပြန်ပေးသည်။
@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;
}
}
အတည်ပြုချက်အရင်းအမြစ်များ
အတည်ပြုချက်အရင်းအမြစ်သည် ကျွန်ုပ်တို့၏အပလီကေးရှင်းမှထုတ်ပေးသောအတည်ပြုချက်များကိုစာရင်းပြုစုရန်အတွက် HTTP အဆုံးမှတ်တစ်ခုဖြစ်သည်။
@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;
}
}
သင့်အောင်လုပ်ခြင်း
AMQ အွန်လိုင်းသို့ ချိတ်ဆက်ရန်၊ ကျွန်ုပ်တို့၏ အပလီကေးရှင်းသည် အချို့သောဖွဲ့စည်းပုံစနစ်ဒေတာ၊ ဥပမာ- Quarkus ချိတ်ဆက်ကိရိယာဖွဲ့စည်းမှုပုံစံ၊ AMQP အဆုံးမှတ်အချက်အလက်နှင့် သုံးစွဲသူအထောက်အထားများ လိုအပ်မည်ဖြစ်သည်။ Configuration data အားလုံးကို တစ်နေရာတည်းတွင် ထားရှိခြင်းသည် ပိုကောင်းသည်၊ သို့သော် Quarkus အက်ပ်ကို ပြင်ဆင်ခြင်းအတွက် ဖြစ်နိုင်သော ရွေးချယ်မှုများကို ပြသရန် ၎င်းတို့ကို တမင်ခွဲထုတ်ပါမည်။
ချိတ်ဆက်မှုများ
အပလီကေးရှင်းဂုဏ်သတ္တိဖိုင်ကို အသုံးပြု၍ ချိတ်ဆက်ကိရိယာဖွဲ့စည်းမှုပုံစံကို စုစည်းချိန်၌ ပေးနိုင်သည်-
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
အရာများကို ရိုးရှင်းစေရန်၊ "မှာယူမှုများ" လိပ်စာအတွက် မက်ဆေ့ချ်တန်းစီခြင်းကိုသာ အသုံးပြုပါမည်။ ကျွန်ုပ်တို့၏ အပလီကေးရှင်းရှိ "အတည်ပြုချက်များ" လိပ်စာသည် မှတ်ဉာဏ်တွင် တန်းစီခြင်းကို အသုံးပြုမည်ဖြစ်သည်။
AMQP အဆုံးမှတ်
စုစည်းမှုအချိန်တွင်၊ AMQP အဆုံးမှတ်အတွက် hostname နှင့် port နံပါတ်ကို မသိသောကြောင့် ၎င်းတို့ကို ထိုးရပါမည်။ အဆုံးမှတ်ကို AMQ Online မှ ဖန်တီးထားသည့် configmap တွင် သတ်မှတ်နိုင်သည်၊ ထို့ကြောင့် ၎င်းတို့ကို အပလီကေးရှင်းမန်နီးဖက်စ်ရှိ ပတ်၀န်းကျင်တွင် ပြောင်းလဲနိုင်သော ကိန်းရှင်များမှတစ်ဆင့် သတ်မှတ်ပါမည်။
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
အထောက်အထားများ
ကျွန်ုပ်တို့၏လျှောက်လွှာကို OpenShift သို့ စစ်မှန်ကြောင်းအတည်ပြုရန် ဝန်ဆောင်မှုအကောင့်တိုကင်ကို အသုံးပြုနိုင်သည်။ ၎င်းကိုလုပ်ဆောင်ရန်၊ သင်သည် pod ၏ဖိုင်စနစ်မှ အထောက်အထားစိစစ်ခြင်းတိုကင်ကိုဖတ်မည့် စိတ်ကြိုက် ConfigSource ကို ဦးစွာဖန်တီးရပါမည်။
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);
}
}
လျှောက်လွှာကိုတည်ဆောက်ပြီးအသုံးပြုပါ။
အပလီကေးရှင်းကို လည်ပတ်နိုင်သောဖိုင်အဖြစ် စုစည်းထားရမည်ဖြစ်သောကြောင့် GraalVM virtual machine တစ်ခု လိုအပ်ပါသည်။ ၎င်းအတွက် ပတ်ဝန်းကျင်တစ်ခုကို မည်သို့သတ်မှတ်ရမည်အကြောင်း အသေးစိတ်အတွက် သက်ဆိုင်ရာ ညွှန်ကြားချက်များတွင် ကြည့်ပါ။
ထို့နောက် ထိုနေရာတွင် ပေးထားသည့် ညွှန်ကြားချက်များအတိုင်း၊ သင်သည် အရင်းအမြစ်ကို ဒေါင်းလုဒ်လုပ်ရန်၊ ကျွန်ုပ်တို့၏ အပလီကေးရှင်းကို တည်ဆောက်ပြီး အသုံးပြုရန် လိုအပ်သည်-
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
ဤအမိန့်များပြီးနောက်၊ အပလီကေးရှင်းကို အသုံးပြုနိုင်မည်ဖြစ်ပြီး၊ သို့သော် AMQ Online တွင် ကျွန်ုပ်တို့လိုအပ်သော စာတိုပေးပို့ခြင်းဆိုင်ရာအရင်းအမြစ်များကို ကျွန်ုပ်တို့ မသတ်မှတ်မချင်း စတင်မည်မဟုတ်ပါ။
စာတိုပေးပို့ခြင်းစနစ်အား စနစ်ထည့်သွင်းခြင်း။
ယခု ကျန်ရှိနေသေးသည်မှာ ကျွန်ုပ်တို့၏ အက်ပ်လီကေးရှင်း မက်ဆေ့ချ်စနစ်တွင် လိုအပ်သည့် အရင်းအမြစ်များကို သတ်မှတ်ရန်ဖြစ်သည်။ ၎င်းကိုပြုလုပ်ရန်၊ သင်ဖန်တီးရန်လိုအပ်သည်- 1) စာတိုပေးပို့မှုစနစ်အဆုံးမှတ်ကိုစတင်ရန် လိပ်စာနေရာတစ်ခု၊ 2) အပလီကေးရှင်းတွင်ကျွန်ုပ်တို့အသုံးပြုသည့်လိပ်စာများကို configure လုပ်ရန်လိပ်စာ၊ 3) သုံးစွဲသူ အထောက်အထားများကို သတ်မှတ်ရန် အသုံးပြုသူကို စာတိုပေးပို့ခြင်း။
လိပ်စာနေရာ
AMQ Online ရှိ AddressSpace အရာဝတ္ထုသည် ချိတ်ဆက်မှု အဆုံးမှတ်များနှင့် အထောက်အထားစိစစ်ခြင်းနှင့် ခွင့်ပြုချက်မူဝါဒများကို မျှဝေသည့် လိပ်စာများအုပ်စုဖြစ်သည်။ လိပ်စာနေရာတစ်ခုကို ဖန်တီးသောအခါ၊ မက်ဆေ့ဂျ်ပို့ခြင်းဆိုင်ရာ အဆုံးမှတ်များကို မည်သို့ဖော်ထုတ်မည်ကို သင်သတ်မှတ်နိုင်သည်-
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
လိပ်စာ
လိပ်စာများကို စာတိုပေးပို့ခြင်းနှင့် လက်ခံခြင်းအတွက် အသုံးပြုသည်။ လိပ်စာတစ်ခုစီတွင် ၎င်း၏အသုံးအနှုန်းများကို ဆုံးဖြတ်ပေးသည့် အမျိုးအစားတစ်ခုစီရှိသည့်အပြင် လက်ဝယ်ထားရှိရမည့် အရင်းအမြစ်အရေအတွက်ကို သတ်မှတ်ပေးသည့် အစီအစဉ်တစ်ခုလည်း ရှိသည်။ လိပ်စာကို သတ်မှတ်နိုင်သည်၊ ဥပမာ၊ ဤကဲ့သို့သော၊
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
စာတိုပေးပို့အသုံးပြုသူ
ယုံကြည်စိတ်ချရသော အပလီကေးရှင်းများကသာ သင့်လိပ်စာများသို့ မက်ဆေ့ချ်များ ပေးပို့လက်ခံနိုင်စေရန် သေချာစေရန်၊ သင်သည် မက်ဆေ့ချ်ပို့စနစ်တွင် အသုံးပြုသူတစ်ဦးကို ဖန်တီးရပါမည်။ အစုအဝေးတစ်ခုပေါ်တွင် လုပ်ဆောင်နေသည့် အပလီကေးရှင်းများအတွက်၊ ဖောက်သည်များအား OpenShift ဝန်ဆောင်မှုအကောင့်ကို အသုံးပြု၍ စစ်မှန်ကြောင်းအထောက်အထားပြနိုင်သည်။ အသုံးပြုသူ "ဝန်ဆောင်မှုအကောင့်" ကို ဥပမာအားဖြင့် ဤကဲ့သို့ သတ်မှတ်နိုင်သည်-
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"]
လျှောက်လွှာကို configure လုပ်ရန်ခွင့်ပြုချက်များ
AMQ Online သည် AMQP အဆုံးမှတ်အချက်အလက်ကို မြှုပ်နှံထားခဲ့သည့် configmap ကို ဖန်တီးရန်အတွက်၊ Role နှင့် 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
Configurations တွေကို ဘယ်လိုအသုံးချမလဲ။
သင်သည် ဤကဲ့သို့သော စာတိုပေးပို့ခြင်းစနစ်ပုံစံကို အသုံးပြုနိုင်ပါသည်။
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
လျှောက်လွှာအတည်ပြုခြင်း။
အပလီကေးရှင်းကို စတင်ကြောင်းသေချာစေရန်၊ ပထမဆုံးအနေဖြင့် သက်ဆိုင်ရာလိပ်စာများကို ဖန်တီးပြီး အသက်ဝင်နေသလား စစ်ဆေးကြပါစို့။
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
ပြီးရင် အပလီကေးရှင်း လမ်းကြောင်း URL ကို စစ်ဆေးကြည့်ရအောင် (ဒီလိပ်စာကို ဘရောက်ဆာမှာ ဖွင့်လိုက်ပါ)။
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
AMQ Online မှ မက်ဆေ့ချ်များ ပေးပို့လက်ခံခြင်းဖြစ်သောကြောင့် လက်မှတ်များကို အခါအားလျော်စွာ အပ်ဒိတ်လုပ်ထားကြောင်း ဘရောက်ဆာက ပြသသင့်သည်။
တက်ကဉျြးခြုပျ
ထို့ကြောင့် ကျွန်ုပ်တို့သည် စာတိုပေးပို့ရန်အတွက် AMQP ကိုအသုံးပြုသည့် Quarkus အပလီကေးရှင်းကိုရေးသားခဲ့ပြီး Red Hat OpenShift ပလပ်ဖောင်းပေါ်တွင်လည်ပတ်ရန် အပလီကေးရှင်းကိုဖွဲ့စည်းကာ AMQ အွန်လိုင်းဖွဲ့စည်းပုံအပေါ်အခြေခံ၍ ၎င်း၏ဖွဲ့စည်းပုံကိုအကောင်အထည်ဖော်ခဲ့သည်။ ထို့နောက် ကျွန်ုပ်တို့၏ အပလီကေးရှင်းအတွက် စာတိုပေးပို့ခြင်းစနစ် စတင်ရန် လိုအပ်သော သရုပ်ဖော်ပုံများကို ဖန်တီးခဲ့သည်။
ဒါက Quarkus အကြောင်း စီးရီးကို နိဂုံးချုပ်လိုက်ပါတယ်၊ ဒါပေမယ့် ရှေ့မှာ အသစ်အဆန်းတွေ စိတ်ဝင်စားစရာတွေ အများကြီး ရှိပါသေးတယ်၊ စောင့်မျှော်ကြည့်ရှုလိုက်ပါ။
source: www.habr.com