Setelah membuat aplikasi, Anda harus menghubungkan sebuah executor untuk menjalankan tugas.
Menghubungkan aplikasi standar ke executor
Pendaftaran Otomatis
Untuk menggunakan pendaftaran otomatis, aplikasi Anda harus bergantung pada SDK XXL-JOB. Setelah pengaturan koneksi dikonfigurasi, executor akan terdaftar secara otomatis saat aplikasi dimulai.
1. Melihat pengaturan koneksi
Masuk ke Konsol MSE XXL-JOB.
Di pojok kiri atas halaman, pilih Region.
Klik ID instans target. Di panel navigasi sebelah kiri, pilih Application Management.
Temukan aplikasi target. Di kolom Number of Executors, klik tombol Connect.
Pilih Automatic Registration sebagai jenis koneksi dan lengkapi konfigurasinya.
2. Mengimpor SDK untuk menghubungkan executor
Java SDK
Tambahkan dependensi Maven `xxl-job-core` ke file pom.xml Anda.
Inisialisasi executor.
@Configuration public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.accessToken}") private String accessToken; @Value("${xxl.job.executor.appname}") private String appname; @Value("${xxl.job.executor.address}") private String address; @Value("${xxl.job.executor.ip}") private String ip; @Value("${xxl.job.executor.port}") private int port; @Value("${xxl.job.executor.logpath}") private String logPath; @Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays; @Bean public XxlJobSpringExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job config init."); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(appname); xxlJobSpringExecutor.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }
Go SDK
Jalankan perintah berikut untuk menarik SDK Go XXL-JOB menggunakan tag terbaru.
go get github.com/xxl-job/xxl-job-executor-go@{latest_tag}Tulis kode aplikasi Anda.
package main import ( "context" "fmt" xxl "github.com/xxl-job/xxl-job-executor-go" "github.com/xxl-job/xxl-job-executor-go/example/task" "log" ) func main() { exec := xxl.NewExecutor( xxl.ServerAddr("xxxxxx"), // Alamat permintaan. Dapatkan dari pengaturan koneksi di bagian Application Management pada konsol. xxl.AccessToken("xxxxxxx"), // Token akses. Dapatkan dari pengaturan koneksi di bagian Application Management pada konsol. xxl.ExecutorPort("9999"), // Port default adalah 9999. Parameter ini opsional. xxl.RegistryKey("golang-jobs"), // Nama executor. xxl.SetLogger(&logger{}), // Logger kustom. ) exec.Init() exec.Use(customMiddleware) // Tetapkan penanganan untuk melihat log. exec.LogHandler(customLogHandle) // Daftarkan penanganan tugas. exec.RegTask("task.test", task.Test) exec.RegTask("task.test2", task.Test2) exec.RegTask("task.panic", task.Panic) log.Fatal(exec.Run()) } // Penanganan log kustom. func customLogHandle(req *xxl.LogReq) *xxl.LogRes { return &xxl.LogRes{Code: xxl.SuccessCode, Msg: "", Content: xxl.LogResContent{ FromLineNum: req.FromLineNum, ToLineNum: 2, LogContent: "This is a custom log handler.", IsEnd: true, }} } // Implementasi antarmuka xxl.Logger. type logger struct{} func (l *logger) Info(format string, a ...interface{}) { fmt.Println(fmt.Sprintf("Custom log - "+format, a...)) } func (l *logger) Error(format string, a ...interface{}) { log.Println(fmt.Sprintf("Custom log - "+format, a...)) } // Middleware kustom. func customMiddleware(tf xxl.TaskFunc) xxl.TaskFunc { return func(cxt context.Context, param *xxl.RunReq) string { log.Println("I am a middleware start") res := tf(cxt, param) log.Println("I am a middleware end") return res } }
Python SDK
Instal dependensi.
pip install pyxxl # Untuk menulis log ke Redis pip install "pyxxl[redis]" # Untuk memuat konfigurasi dari file .env pip install "pyxxl[dotenv]" # Untuk menginstal semua fitur pip install "pyxxl[all]"Tulis kode aplikasi Anda.
import asyncio import time from pyxxl import ExecutorConfig, PyxxlRunner from pyxxl.ctx import g config = ExecutorConfig( xxl_admin_baseurl="http://xxljob-1b3fd8196eb.schedulerx.mse.aliyuncs.com/api/", executor_app_name="xueren-test", access_token="default_token", # executor_listen_host="0.0.0.0", # Jika xxl-admin dapat langsung terhubung ke alamat IP executor, Anda tidak perlu menentukan executor_listen_host. ) app = PyxxlRunner(config) @app.register(name="demoJobHandler") async def test_task(): # Anda dapat mendapatkan parameter tugas dengan "g" g.logger.info("get executor params: %s" % g.xxl_run_data.executorParams) for i in range(10): g.logger.warning("test logger %s" % i) await asyncio.sleep(5) return "Success..." @app.register(name="sync_func") def test_task4(): # Untuk melihat log eksekusi di xxl-admin, Anda harus menggunakan g.logger untuk mencetak log. Secara default, hanya log level INFO ke atas yang dicetak. n = 1 g.logger.info("Job %s get executor params: %s" % (g.xxl_run_data.jobId, g.xxl_run_data.executorParams)) # Jika tugas sinkron berisi loop, Anda harus memeriksa g.cancel_event di setiap iterasi untuk mendukung operasi pembatalan. while n <= 10 and not g.cancel_event.is_set(): # Jika Anda tidak perlu melihat log dari xxl-admin, Anda dapat menggunakan logger sendiri. g.logger.info( "log to {} logger test_task4.{},params:{}".format( g.xxl_run_data.jobId, n, g.xxl_run_data.executorParams, ) ) time.sleep(2) n += 1 return "Success 3" if __name__ == "__main__": app.run_executor()
Entri Manual
Anda dapat mengelola alamat executor secara manual. Alamat harus dalam format http://192.168.0.1:9999/.
Masuk ke Konsol MSE XXL-JOB.
Di pojok kiri atas halaman, pilih Region.
Klik ID instans target. Di panel navigasi sebelah kiri, pilih Application Management.
Temukan aplikasi target. Di kolom Number of Executors, klik tombol Connect.
Atur Connection Type menjadi Manual Entry, lalu masukkan Executor Address.
Menghubungkan aplikasi HTTP ke executor
Anda tidak memerlukan SDK untuk menghubungkan aplikasi HTTP. Sebagai gantinya, Anda dapat mengonfigurasi nama domain atau layanan Kubernetes untuk secara otomatis menemukan node backend dan menggunakan protokol HTTP untuk penjadwalan.
Menghubungkan ke layanan Kubernetes
Jika aplikasi HTTP Anda diterapkan di Alibaba Cloud Container Service for Kubernetes (ACK), Anda dapat menghubungkannya menggunakan layanan Kubernetes.
(Opsional) Terapkan aplikasi di ACK. Jenis kluster berikut didukung:
ACK managed cluster dengan plugin jaringan Terway
ACK Serverless cluster
ACS cluster
(Opsional) Buat layanan untuk aplikasi di ACK. Jenis layanan berikut didukung:
ClusterIP
LoadBalancer
Masuk ke Konsol MSE XXL-JOB.
Di pojok kiri atas halaman, pilih Region.
Klik ID instans target. Di panel navigasi sebelah kiri, pilih Application Management.
Temukan aplikasi target. Di kolom Number of Executors, klik tombol Connect.
Pada halaman Connect Executor, pilih Connect K8s Service sebagai Connection Type, lengkapi pengaturan parameter, lalu klik OK untuk menyelesaikan koneksi.
Setelah koneksi dibuat, jumlah executor diperbarui. Anda dapat mengklik angka tersebut untuk melihat daftar pod backend.
Memasukkan nama domain secara manual
Jika aplikasi Anda tidak diterapkan di ACK, misalnya pada Instance ECS, Anda dapat menggunakan nama domain internal untuk menjadwalkan tugas HTTP.
(Opsional) Buat gerbang untuk aplikasi HTTP. Nama domain internal akan dibuat secara otomatis. Misalnya, Anda dapat menggunakan Network Load Balancer (NLB).
Di pojok kiri atas halaman, pilih Region.
Klik ID instans target. Di panel navigasi sebelah kiri, pilih Application Management.
Temukan aplikasi target. Di kolom Number of Executors, klik tombol Connect.
Pada halaman Connect Executor, atur Connection Type menjadi Enter Domain Name, lalu konfigurasikan titik akhir internal dalam wilayah yang sama.