ሰላም ሁላችሁም! ይሄው ነው - የኳርኩስ ተከታታዮች የመጨረሻ ጽሑፋችን! (በነገራችን ላይ የእኛን ዌቢናር ይመልከቱ
В
ከስሪት 0.17.0 ጀምሮ፣
AMQ Onlineን በOpenShift መድረክ ላይ እንዳሰማራህ ይታሰባል (ካልሆነ ከዚያ ተመልከት
ለመጀመር፣ ምላሽ ሰጪ መልዕክትን በመጠቀም ቀላል የትእዛዝ ሂደት የሚሆን የኳርኩስ መተግበሪያ እንፈጥራለን። ይህ አፕሊኬሽን በተወሰነ የጊዜ ክፍተት ውስጥ ወደ መልእክት ወረፋ የሚልክ ትዕዛዝ ጄነሬተርን እንዲሁም መልእክቶችን ከወረፋው የሚያስኬድ እና በአሳሹ ውስጥ የሚታዩ ማረጋገጫዎችን የሚያመነጭ የትዕዛዝ ፕሮሰሰርን ያካትታል።
አንዴ አፕሊኬሽኑን ከፈጠርን በኋላ የመልእክት መላላኪያ ሥርዓቱን እንዴት ወደ አፕሊኬሽኑ መክተት እና AMQ Onlineን በመጠቀም በሲስተሙ ላይ የምንፈልጋቸውን ግብዓቶች እንዴት እንደሚጠቀሙ እናሳይዎታለን።
የኳርኩስ መተግበሪያ
የእኛ የኳርኩስ መተግበሪያ በOpenShift ላይ ይሰራል እና የተሻሻለ የፕሮግራሙ ስሪት ነው።
የትዕዛዝ ጀነሬተር
ጀነሬተሩ በቀላሉ በየ 5 ሰከንድ እያደጉ ያሉ የትዕዛዝ መታወቂያዎችን ወደ “ትዕዛዝ” አድራሻ ይልካል።
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
የትዕዛዝ ፕሮሰሰር
የትዕዛዝ ተቆጣጣሪው ይበልጥ ቀላል ነው፣ የማረጋገጫ መታወቂያ ወደ "ማረጋገጫዎች" አድራሻ ብቻ ይመልሳል።
@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;
}
}
የማረጋገጫ መርጃዎች
የማረጋገጫ ሀብቱ በእኛ መተግበሪያ የተፈጠሩትን ማረጋገጫዎች ለመዘርዘር የኤችቲቲፒ የመጨረሻ ነጥብ ነው።
@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 ኦንላይን ጋር ለመገናኘት የኛ መተግበሪያ አንዳንድ የውቅረት ዳታ ያስፈልገዋል፡- የኳርኩስ አያያዥ ውቅር፣ AMQP የመጨረሻ ነጥብ መረጃ እና የደንበኛ ምስክርነቶች። እርግጥ ነው, ሁሉንም የማዋቀሪያ መረጃዎችን በአንድ ቦታ ላይ ማስቀመጥ የተሻለ ነው, ነገር ግን ሆን ብለን የኳርኩስ መተግበሪያን ለማዋቀር ሊሆኑ የሚችሉ አማራጮችን ለማሳየት እንለያቸዋለን.
አያያctorsች
የማገናኛ ውቅር በማጠናቀር ጊዜ የመተግበሪያ ባህሪያት ፋይልን በመጠቀም ሊቀርብ ይችላል፡-
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
ነገሮችን ቀላል ለማድረግ፣ ለ"ትዕዛዝ" አድራሻ የመልእክት ወረፋ ብቻ እንጠቀማለን። እና በእኛ መተግበሪያ ውስጥ ያለው "ማረጋገጫዎች" አድራሻ በማህደረ ትውስታ ውስጥ ወረፋ ይጠቀማል.
AMQP የመጨረሻ ነጥብ
በማጠናቀር ጊዜ፣ የ AMQP የመጨረሻ ነጥብ የአስተናጋጅ ስም እና የወደብ ቁጥር አይታወቅም፣ ስለዚህ መከተብ አለባቸው። የመጨረሻ ነጥቡ በ AMQ ኦንላይን በተፈጠረው ማዋቀር ውስጥ ሊዋቀር ይችላል፣ ስለዚህ በመተግበሪያው ዝርዝር ውስጥ በአካባቢ ተለዋዋጮች እንገልጻቸዋለን፡
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 ለማረጋገጥ ጥቅም ላይ ሊውል ይችላል። ይህንን ለማድረግ በመጀመሪያ ከፖድ ፋይል ስርዓት የማረጋገጫ ቶከንን የሚያነብ ብጁ 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);
}
}
ማመልከቻውን ይገንቡ እና ያሰራጩ
አፕሊኬሽኑ ወደ ተፈጻሚነት ያለው ፋይል መጠቅለል ስላለበት የGalVM ቨርቹዋል ማሽን ያስፈልጋል። ለዚህ አካባቢን እንዴት ማቀናበር እንደሚቻል ላይ ዝርዝሮችን ለማግኘት በ ውስጥ ያሉትን ተዛማጅ መመሪያዎች ይመልከቱ
ከዚያ ፣ እዚያ የተሰጡትን መመሪያዎች በመከተል ፣ ምንጩን ማውረድ ፣ መተግበሪያችንን መገንባት እና ማሰማራት ያስፈልግዎታል ።
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) በመተግበሪያው ውስጥ የምንጠቀምባቸውን አድራሻዎች ለማዋቀር አድራሻ; 3) የደንበኛ ምስክርነቶችን ለማዘጋጀት ተጠቃሚ የመልእክት መላላኪያ።
የአድራሻ ቦታ
በ AMQ Online ውስጥ ያለ የአድራሻ ቦታ ነገር የግንኙነት የመጨረሻ ነጥቦችን እና የማረጋገጫ እና የፈቀዳ መመሪያዎችን የሚጋሩ የአድራሻዎች ቡድን ነው። የአድራሻ ቦታ ሲፈጥሩ የመልእክት መላላኪያ የመጨረሻ ነጥቦች እንዴት እንደሚጋለጡ መግለጽ ይችላሉ፡
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"]
መተግበሪያውን የማዋቀር ፈቃዶች
AMQ ኦንላይን የ AMQP የመጨረሻ ነጥብ መረጃን ለመክተት የተጠቀምንበትን ውቅረት ለመፍጠር፣ 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
አወቃቀሮችን እንዴት እንደሚተገበር
የመልእክት ስርዓት ውቅርን እንደሚከተለው መተግበር ይችላሉ-
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ን ለመልእክት የሚጠቀም የኳርኩስ አፕሊኬሽን ጽፈናል፣ አፕሊኬሽኑን በ Red Hat OpenShift መድረክ ላይ እንዲሰራ አዋቅረነው እና በ AMQ Online ውቅር ላይ በመመስረት አወቃቀሩን ተግባራዊ አደረግን። ለመተግበሪያችን የመልእክት መላላኪያ ስርዓቱን ለመጀመር የሚያስፈልጉትን መግለጫዎች ፈጠርን ።
ስለ ቋርኩስ ተከታታዩን በዚህ ያጠናቅቃል ነገር ግን ብዙ አዳዲስ እና አስደሳች ነገሮች ከፊታችን አሉና ተከታተሉት!
ምንጭ: hab.com