Etzel Art of Digital Manufacturing
Bize ulaşın
Lunex 1.6.0 kullanım kılavuzu

Uygulamalı örnek: sipariş ve stok

İsteğe bağlı PostgreSQL ortamını, örnek tabloları ve indirilebilir projeyi hazırlayın.

Bu bölüm, isterseniz kurup adım adım deneyebileceğiniz ayrı bir uygulamadır. Kendi veritabanınızla çalışmak için bu tabloları oluşturmanız gerekmez; genel veritabanı rehberinden ilerleyebilirsiniz.

Bu uygulamada müşterinin siparişlerini bulacak, yeni sipariş kaydedecek, bir siparişi iptal edecek ve stok ayırarak onaylayacaksınız. Stok yetmediğinde veya işlem yarıda hata verdiğinde değişikliklerin geri alındığını da göreceksiniz. Bütün kayıtlar örnektir.

Temel SQL ve JSON bilgisi yeterlidir. Bağlantı, mesaj gövdesi, parametre, transaction ve tekrar deneme kavramları ihtiyaç duyduğunuz adımda açıklanır.

Yapacağınız işDevam edeceğiniz rehber
Veritabanını, Secret’ı ve projeyi hazırlamakBu sayfa
Müşterinin siparişlerini ve tek bir kaydı okumakSiparişleri bulun
Kayıt eklemek ve eski veriyi ezmeden güncellemekSipariş kaydedin ve iptal edin
Sipariş ve stoğu birlikte değiştirmek; hata halinde geri almakOnay, transaction ve rollback
Tekrar denemeye karar vermek ve hatayı araştırmakTekrar deneme ve hata teşhisi

1. Gerekli erişimleri hazırlayın

Lunex’te proje düzenleme ve Run yetkisi gerekir. Veritabanını hazırlayan kişi tablo/kullanıcı oluşturabilmeli; Secret’ı hazırlayan kişi System kaynaklarını yönetebilmelidir. Bu kişiler aynı olmak zorunda değildir. Hazır bir bağlantı verildiyse yöneticinizden aşağıdaki bilgileri alın.

BilgiBu örnekteki değer
Veritabanıhelp_order_lab
Uygulama kullanıcısıhelp_order_lab_app
Secrethelp-order-lab-db, anahtarlar: username, password
Bağlantı adıordersDb
Proje kimliğihelp-order-lab
JDBC adresijdbc:postgresql://SUNUCU:5432/help_order_lab

Örnek PostgreSQL kullanır. Sunucu adresi entegrasyonun çalıştığı ortamdan erişilebilir olmalıdır. Tarayıcınızın bağlanabilmesi yeterli değildir; runtime içindeki localhost o container’ı gösterir. Paket içindeki postgres.lunex.svc.cluster.local adresi yalnızca bu servis ve namespace adlarına sahip kurulumlar içindir.

2. Ayrı deneme veritabanını oluşturun

Veritabanı yöneticisi, mevcut sunucuda ayrı bir veritabanı ve uygulama kullanıcısı oluşturur. Aşağıdaki komutlar psql içindir; yönetici hesabıyla bağlıyken çalıştırılır. \password parolayı gizli istemde alır; SQL dosyasına gerçek parola yazmayın.

CREATE ROLE help_order_lab_app LOGIN;
\password help_order_lab_app
CREATE DATABASE help_order_lab;
REVOKE ALL ON DATABASE help_order_lab FROM PUBLIC;
\connect help_order_lab

Yeni ve boş help_order_lab içinde aşağıdaki tablo ve örnek kayıtları oluşturun. Bu adımı var olan iş tablolarınızda çalıştırmayın.

-- Run once in the dedicated help_order_lab database as its owner.
CREATE TABLE products (
    sku text PRIMARY KEY,
    name text NOT NULL,
    available integer NOT NULL CHECK (available >= 0)
);

CREATE TABLE orders (
    order_id text PRIMARY KEY,
    customer_id text NOT NULL,
    sku text NOT NULL REFERENCES products(sku),
    quantity integer NOT NULL CHECK (quantity > 0),
    status text NOT NULL DEFAULT 'NEW' CHECK (status IN ('NEW', 'APPROVED', 'CANCELLED')),
    version integer NOT NULL DEFAULT 0
);

CREATE INDEX orders_customer_id ON orders(customer_id, order_id);

INSERT INTO products(sku, name, available) VALUES
    ('TEA-01', 'Tea', 20),
    ('COFFEE-01', 'Coffee', 8);

INSERT INTO orders(order_id, customer_id, sku, quantity) VALUES
    ('ORD-1001', 'C-100', 'TEA-01', 2),
    ('ORD-1002', 'C-200', 'COFFEE-01', 3),
    ('ORD-1003', 'C-100', 'TEA-01', 1);

GRANT CONNECT ON DATABASE help_order_lab TO help_order_lab_app;
GRANT USAGE ON SCHEMA public TO help_order_lab_app;
GRANT SELECT, INSERT, UPDATE ON orders TO help_order_lab_app;
GRANT SELECT, UPDATE ON products TO help_order_lab_app;

Başlangıçta çay stoğu 20, kahve stoğu 8 adettir. C-100 müşterisinin iki, C-200 müşterisinin bir siparişi vardır; hepsi NEW durumundadır. version, kaydın kaç kez değiştirildiğini izler. Sipariş oluşturmak stok ayırmaz; stok onay sırasında düşer.

Uygulama hesabı yalnızca gereken okuma/yazma izinlerini alır. Tablo oluşturma ve silme, kullanıcı yönetme veya diğer uygulamaların veritabanlarına erişme iznine ihtiyaç duymaz. PRIMARY KEY, CHECK ve REFERENCES kuralları yanlış veriye karşı veritabanında da kontrol sağlar.

3. Parolayı Secret’a koyun

  1. System → Secrets → Create secret ile help-order-lab-db oluşturun.
  2. Add key ile username anahtarına help_order_lab_app yazın.
  3. password anahtarına veritabanında belirlediğiniz parolayı ekleyin.
  4. Secret’ın runtime ile aynı namespace’te bulunduğunu ortam yöneticinizle doğrulayın. Geliştirme runtime’ının ve paketli entegrasyonların lunex-integration servis hesabı bu namespace’teki Secret’ları okuyabilir.

Veritabanı Secret'ının username ve password anahtarları; değerler gizli

Ayrıntılı yetki, kaynak ve referans adımları için Secret yönetimini kullanın. Proje ZIP’i Secret değerlerini taşımaz. Başka ortama geçerken aynı referansı o ortamın kendi bağlantı bilgileriyle hazırlayın.

4. Örnek projeyi içe alın

Sipariş veritabanı örnek projesini indirin.

  1. Projects → Import project seçin; indirdiğiniz ZIP’i yükleyip Import project düğmesine basın.
  2. help-order-lab projesini açın. Aynı kimlikte bir proje zaten varsa onu kullanın; import mevcut projeyi güncellemez. Ayrı kopya için ZIP’teki application.properties dosyasında camel.main.name ve camel.jbang.gav içindeki proje kimliğini; deployment.jkube.yaml içindeki ad ve proje etiketlerini de değiştirip dosyaları yeniden ZIP’leyin.
  3. Source → Files → application.properties açın. orders.jdbc.url değerini kendi sunucunuza göre düzenleyin; diğer runtime ayarlarını koruyun.
  4. API design → API access içinde API exposure = Disabled olmalıdır. Bu rehberde istekler geliştiriciye açık Running project hedefinden gönderilir.

ZIP bağlantıyı, altı API işlemini ve akışları içerir. Veritabanını ve Secret’ı oluşturmaz; kendiliğinden çalışmaz veya API yayımlamaz.

DosyaGörevi
application.propertiesProje kimliği, runtime bağımlılıkları ve veritabanı adresi
database.camel.yamlOrtak bağlantı ve transaction ayarı
read.camel.yamlSipariş arama, tek sipariş ve stok okuma
write.camel.yamlSipariş ekleme ve sürüm kontrollü iptal
approve.camel.yamlSipariş onayı ve stok güncellemesi
openapi.jsonİşlemler, girdiler ve yanıt sözleşmeleri
api-publishing.yamlDış API erişiminin kapalı olması
deployment.jkube.yamlPaketleme için proje dağıtım şablonu

5. Bağlantının neyi paylaştığını inceleyin

Source içinden database.camel.yaml dosyasını açın. Designer → Beans görünümündeki ordersDb, SQL adımlarının kullandığı adlandırılmış bağlantıdır. Sıfırdan oluştururken Architecture → More create options → Bean → Type → Database yolunu kullanabilirsiniz; örnek projede hazırdır.

Orders Database Lab projesindeki ortak veritabanı bağlantısı

Bağlantının temel kısmı şöyledir:

- beans:
    - name: ordersDb
      type: '#class:org.apache.commons.dbcp2.BasicDataSource'
      properties:
        driverClassName: org.postgresql.Driver
        url: '{{orders.jdbc.url}}'
        username: '{{secret:help-order-lab-db/username}}'
        password: '{{secret:help-order-lab-db/password}}'
        maxTotal: 4
        maxWaitMillis: 5000
        validationQuery: SELECT 1

ordersDb adını birden çok akış kullanır; her adıma yeniden parola girmezsiniz. Bağlantı havuzu en fazla dört fiziksel bağlantı tutar. maxWaitMillis, havuzdan boş bağlantı bekleme sınırıdır; SQL sorgusunun veya ağın zaman aşımı değildir. İş hacminize göre bu süreleri ayrıca değerlendirin.

{{orders.jdbc.url}} proje ayarını, {{secret:…}} gizli değeri okur. ${body} veya ${header.customerId} ise o anki mesajı okur. Bu iki ifade türü farklı amaçlara hizmet eder.

Örnek projenin bağımlılık listesi SQL, JSON, transaction, Secret desteği, JDBC sürücüsü ve bağlantı havuzunu içerir:

camel.jbang.dependencies=camel-console,camel-sql,camel-jackson,camel-spring,camel-kubernetes,mvn:org.postgresql:postgresql:42.7.13,mvn:org.apache.commons:commons-dbcp2:2.14.0

Mevcut bir projeye uyarlarken gereken değerleri kendi listenize ekleyin. Bağımlılık veya bağlantının başlangıç ayarlarını değiştirdiyseniz runtime’ı yeniden başlatın; yalnızca dosyayı kaydetmek çalışan bağlantıyı yeniden kurmaz.

6. İlk gerçek bağlantıyı doğrulayın

  1. Projede Run kullanın. Log içinde eksik sürücü, Secret veya bağlantı hatası olmadığını kontrol edin.
  2. API design → getStock → Try it açın.
  3. Target → Running project, sku = COFFEE-01 seçin. Response content type (Accept) için No preference kullanın.
  4. Send ile 200 ve available: 8 bekleyin.
{"sku":"COFFEE-01","name":"Coffee","available":8}

Bu sonuç gerçek veritabanını okur. Mock sözleşmeden örnek üretir; Simulate dış alıcı için verdiğiniz örnek yanıtı kullanır. Bu iki işlem bağlantının, SQL yetkisinin veya rollback’in çalıştığını kanıtlamaz.

Sonraki adım: Müşterinin siparişlerini bulun ve sonucu kullanın.

Denemeyi yeniden başlatma

Örnek tabloları yeniden başlangıç durumuna getirmek isterseniz önce devam eden istek olmadığını ve bağlantınızın yalnız bu iş için ayırdığınız help_order_lab veritabanı olduğunu doğrulayın. Aşağıdaki SQL bu iki tablodaki bütün deneme kayıtlarını siler. Entegrasyon hesabına bu sıfırlama yetkisi verilmediği için yönetici hesabını kullanın.

BEGIN;
TRUNCATE TABLE orders, products;
INSERT INTO products(sku, name, available) VALUES
  ('TEA-01', 'Tea', 20), ('COFFEE-01', 'Coffee', 8);
INSERT INTO orders(order_id, customer_id, sku, quantity) VALUES
  ('ORD-1001', 'C-100', 'TEA-01', 2),
  ('ORD-1002', 'C-200', 'COFFEE-01', 3),
  ('ORD-1003', 'C-100', 'TEA-01', 1);
COMMIT;

Runtime’ı durdurmak veritabanı kayıtlarını silmez. Örneği bitirdiğinizde Kubernetes ortamında proje başlığındaki Delete container ile yalnız bu projenin geliştirme runtime’ını kaldırabilirsiniz; proje dosyaları ve veritabanı kalır.

Lunex’i kendi entegrasyonunuzla görün

Kılavuzda okuduklarınızı kendi sistemlerinizle deneyelim. Demo için bize yazın.