Quarkus மற்றும் AMQ ஆன்லைனில் Red Hat OpenShift இயங்குதளத்தில் கிளவுட்-நேட்டிவ் மெசேஜிங்

அனைவருக்கும் வணக்கம்! இதோ - குவார்கஸ் தொடரில் எங்களின் இறுதிப் பதிவு! (சரி, எங்கள் வெபினாரைப் பாருங்கள் "இது குவார்கஸ் - குபெர்னெட்டஸின் சொந்த ஜாவா கட்டமைப்பு". புதிதாக தொடங்குவது அல்லது ஆயத்த தீர்வுகளை மாற்றுவது எப்படி என்பதை நாங்கள் உங்களுக்குக் காண்பிப்போம்)

Quarkus மற்றும் AMQ ஆன்லைனில் Red Hat OpenShift இயங்குதளத்தில் கிளவுட்-நேட்டிவ் மெசேஜிங்

В முந்தைய இந்த இடுகையில், ஜாவா பயன்பாடுகளை நவீனமயமாக்குவதன் விளைவாக பெறப்பட்ட மேம்பாடுகளை அளவிடுவதற்குப் பயன்படுத்தக்கூடிய தொடர்புடைய கருவிகளைப் பார்த்தோம்.

பதிப்பு 0.17.0 முதல், குவார்க்கஸ் மேம்பட்ட செய்தி வரிசை நெறிமுறையின் பயன்பாட்டை ஆதரிக்கிறது (AMQP), இது பயன்பாடுகள் அல்லது நிறுவனங்களுக்கு இடையே வணிக செய்திகளை மாற்றுவதற்கான ஒரு திறந்த தரநிலையாகும்.

Red Hat AMQ ஆன்லைன் திறந்த மூல திட்டத்தின் அடிப்படையில் உருவாக்கப்பட்ட ஒரு சேவையாகும் EnMasse மற்றும் இயங்குதள அடிப்படையிலான செய்தியிடல் பொறிமுறையை செயல்படுத்துதல் Red Hat OpenShift. இது எவ்வாறு செயல்படுகிறது என்பது பற்றிய கூடுதல் விவரங்களுக்கு, பார்க்கவும் இங்கே (EN). இரண்டு புதிய செய்தியிடல் தொழில்நுட்பங்களைப் பயன்படுத்தி நவீன OpenShift-அடிப்படையிலான செய்தியிடல் அமைப்பை உருவாக்க AMQ ஆன்லைன் மற்றும் Quarkus ஐ எவ்வாறு இணைப்பது என்பதை இன்று நாங்கள் உங்களுக்குக் காண்பிப்போம்.

நீங்கள் ஏற்கனவே AMQ ஆன்லைனில் OpenShift இயங்குதளத்தில் பயன்படுத்தியுள்ளீர்கள் என்று கருதப்படுகிறது (இல்லையெனில், பார்க்கவும் நிறுவல் வழிகாட்டி).

தொடங்குவதற்கு, எதிர்வினை செய்தியைப் பயன்படுத்தி ஒரு எளிய ஆர்டர் செயலாக்க அமைப்பாக இருக்கும் Quarkus பயன்பாட்டை உருவாக்குவோம். இந்த பயன்பாட்டில் ஒரு குறிப்பிட்ட இடைவெளியில் செய்தி வரிசைக்கு ஆர்டர்களை அனுப்பும் ஆர்டர் ஜெனரேட்டரும், வரிசையிலிருந்து செய்திகளைச் செயலாக்கும் மற்றும் உலாவியில் பார்க்கக்கூடிய உறுதிப்படுத்தல்களை உருவாக்கும் ஆர்டர் செயலியும் அடங்கும்.

நாங்கள் பயன்பாட்டை உருவாக்கியதும், பயன்பாட்டில் செய்தியிடல் அமைப்பு உள்ளமைவை எவ்வாறு உட்பொதிப்பது மற்றும் கணினியில் நமக்குத் தேவையான ஆதாரங்களை வழங்க AMQ ஆன்லைனைப் பயன்படுத்துவது எப்படி என்பதைக் காண்பிப்போம்.

குவார்கஸ் பயன்பாடு

எங்கள் Quarkus பயன்பாடு OpenShift இல் இயங்குகிறது மற்றும் இது நிரலின் மாற்றியமைக்கப்பட்ட பதிப்பாகும் amqp-விரைவு தொடக்கம். வாடிக்கையாளர் பக்கத்தின் முழுமையான உதாரணத்தைக் காணலாம் இங்கே.

ஆர்டர் ஜெனரேட்டர்

ஜெனரேட்டர் ஒவ்வொரு 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;
    }
}

உறுதிப்படுத்தல் ஆதாரங்கள்

உறுதிப்படுத்தல் ஆதாரம் என்பது எங்கள் பயன்பாட்டினால் உருவாக்கப்பட்ட உறுதிப்படுத்தல்களை பட்டியலிடுவதற்கான 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 connector configuration, AMQP endpoint information மற்றும் கிளையன்ட் நற்சான்றிதழ்கள். நிச்சயமாக, அனைத்து உள்ளமைவுத் தரவையும் ஒரே இடத்தில் வைத்திருப்பது நல்லது, ஆனால் குவார்கஸ் பயன்பாட்டை உள்ளமைப்பதற்கான சாத்தியமான விருப்பங்களைக் காட்ட வேண்டுமென்றே அவற்றைப் பிரிப்போம்.

இணைப்பிகள்

பயன்பாட்டு பண்புகள் கோப்பைப் பயன்படுத்தி தொகுக்கும் நேரத்தில் இணைப்பான் உள்ளமைவை வழங்கலாம்:

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 க்கு அங்கீகரிக்க சேவை கணக்கு டோக்கனைப் பயன்படுத்தலாம். இதைச் செய்ய, நீங்கள் முதலில் தனிப்பயன் கட்டமைப்பு மூலத்தை உருவாக்க வேண்டும், அது பாட்டின் கோப்பு முறைமையிலிருந்து அங்கீகார டோக்கனைப் படிக்கும்:

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 மெய்நிகர் இயந்திரம் தேவைப்படுகிறது. இதற்கான சூழலை எவ்வாறு அமைப்பது என்பது பற்றிய விவரங்களுக்கு, தொடர்புடைய வழிமுறைகளைப் பார்க்கவும் குவார்கஸ் வழிகாட்டி.

பின்னர், அங்கு கொடுக்கப்பட்டுள்ள வழிமுறைகளைப் பின்பற்றி, நீங்கள் மூலத்தைப் பதிவிறக்கம் செய்து, எங்கள் பயன்பாட்டை உருவாக்கி வரிசைப்படுத்த வேண்டும்:

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 ஆன்லைனில் நமக்குத் தேவையான செய்தி ஆதாரங்களை உள்ளமைக்கும் வரை தொடங்காது.

செய்தியிடல் அமைப்பை அமைத்தல்

இப்போது எஞ்சியிருப்பது எங்கள் பயன்பாட்டிற்கு தேவையான ஆதாரங்களை செய்தியிடல் அமைப்பில் அமைக்க வேண்டும். இதைச் செய்ய, நீங்கள் உருவாக்க வேண்டும்: 1) செய்தியிடல் அமைப்பின் இறுதிப் புள்ளியைத் தொடங்க ஒரு முகவரி இடம்; 2) பயன்பாட்டில் நாம் பயன்படுத்தும் முகவரிகளை உள்ளமைப்பதற்கான முகவரி; 3) வாடிக்கையாளர் நற்சான்றிதழ்களை அமைக்க பயனர் செய்தி அனுப்புதல்.

முகவரி இடம்

AMQ ஆன்லைனில் உள்ள 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"]

பயன்பாட்டை உள்ளமைப்பதற்கான அனுமதிகள்

AMQP எண்ட்பாயிண்ட் தகவலை உட்பொதிக்க நாங்கள் பயன்படுத்திய கட்டமைப்பு வரைபடத்தை AMQ ஆன்லைனில் உருவாக்க, பங்கு மற்றும் பங்கு பிணைப்பு அமைக்கப்பட வேண்டும்:

---
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 ஆன்லைனில் செய்திகள் அனுப்பப்பட்டு பெறப்படுவதால் டிக்கெட்டுகள் அவ்வப்போது புதுப்பிக்கப்படுவதை உலாவி காட்ட வேண்டும்.

சுருக்கமாக

எனவே, AMQP ஐப் பயன்படுத்தி செய்தியிடலைப் பயன்படுத்தும் Quarkus அப்ளிகேஷனை நாங்கள் எழுதி, Red Hat OpenShift இயங்குதளத்தில் பயன்பாட்டை உள்ளமைத்து, AMQ ஆன்லைன் கட்டமைப்பின் அடிப்படையில் அதன் உள்ளமைவைச் செயல்படுத்தினோம். எங்கள் பயன்பாட்டிற்கான செய்தியிடல் அமைப்பைத் தொடங்குவதற்குத் தேவையான மேனிஃபெஸ்ட்களை நாங்கள் உருவாக்கியுள்ளோம்.

இது குவார்கஸைப் பற்றிய தொடரை முடிக்கிறது, ஆனால் புதிய மற்றும் சுவாரஸ்யமான விஷயங்கள் நிறைய உள்ளன, காத்திருங்கள்!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்