Dokumen ini ditujukan untuk sistem yang telah mengintegrasikan Service Provider Interface (SPI) gerbang, seperti sistem bisnis yang mengekspos layanan API mpaaschannel atau Dubbo. Dokumen ini tidak berlaku untuk sistem bisnis yang menggunakan API HTTP.

Impor paket gerbang
Pada file pom.xml utama proyek Anda, impor paket-paket berikut. Jika proyek Anda sudah memiliki dependensi ini, langkah ini dapat dilewati.
Anda harus mengimpor semua dependensi dasar.
Dependensi dasar
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-spi-adapter</artifactId>
<version>1.0.5.20201010</version>
</dependency>
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-log</artifactId>
<version>1.0.5.20201010</version>
</dependency>
<dependency>
<groupId>com.alipay.hybirdpb</groupId>
<artifactId>classparser</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72_noneautotype</version>
</dependency>
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-common</artifactId>
<version>1.0.5.20201010</version>
</dependency>Dependensi MPC
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-spi-mpc</artifactId>
<version>1.0.5.20201010</version>
</dependency>
<dependency>
<groupId>com.alipay.mpaaschannel</groupId>
<artifactId>common</artifactId>
<version>2.4.2019040801</version>
</dependency>
<dependency>
<groupId>com.alipay.mpaaschannel</groupId>
<artifactId>tenant-client</artifactId>
<version>2.4.2019040801</version>
</dependency>Definisikan dan implementasikan antarmuka layanan
Definisikan antarmuka layanan, misalnya com.alipay.xxxx.MockRpc, sesuai kebutuhan Anda. Kemudian, berikan implementasi untuk antarmuka tersebut, misalnya com.alipay.xxxx.MockRpcImpl.
Dalam definisi metode, definisikan parameter input sebagai Value Objects (VO). Praktik ini memungkinkan penambahan parameter ke VO di kemudian hari tanpa mengubah signature metode.
Untuk informasi lebih lanjut tentang spesifikasi pendefinisian antarmuka layanan, lihat Spesifikasi definisi antarmuka bisnis.
Definisikan operationType
Tambahkan anotasi @OperationType pada metode dalam antarmuka layanan untuk menentukan nama layanan yang dipublikasikan. Anotasi @OperationType memiliki tiga anggota:
value: Pengidentifikasi unik untuk layanan RPC. Formatnya adalahorganization.product_domain.product.sub_product.operation.name: Nama antarmuka.desc: Deskripsi antarmuka.
valueharus bersifat unik secara global dalam gerbang. Untuk menghindari konflik dengan layanan lain, tentukan nilai ini dengan tingkat detail yang tinggi. Konflik penamaan dapat mencegah layanan Anda terdaftar.Untuk memudahkan pemeliharaan, pastikan Anda mengisi ketiga field dalam anotasi
@OperationType.
Contoh:
public interface MockRpc {
@OperationType("com.alipay.mock")
Resp mock(Req s);
@OperationType("com.alipay.mock2")
String mock2(String s);
}
public static class Resp {
private String msg;
private int code;
// ignore getter & setter
}
public static class Req {
private String name;
private int age;
// ignore getter & setter
}Kemudian, gunakan paket SPI yang disediakan oleh gerbang untuk mendaftarkan layanan API yang telah didefinisikan ke registri tertentu.
Daftarkan layanan API MPC
Pendaftaran layanan API MPC memerlukan parameter-parameter berikut:
registryUrl: Alamat registri. Alamat untuk registri financial technology bersama adalahmpcpub.mpaas.cn-hangzhou.aliyuncs.com.appName: Nama aplikasi Anda. Nilai ini harus sama dengan nama grup API.workspaceId: ID ruang kerja dari lingkungan tempat aplikasi berada.projectName: Nama proyek dari penyewa tempat aplikasi berada. Nilai ini harus sama dengan Project Name dalam grup API.privateKeyPath: Classpath untuk kunci privat RSA. Kunci ini digunakan untuk memverifikasi koneksi ke mpaaschannel. Kami menyarankan Anda menempatkannya di/META-INF/config/rsa-mpc-pri-key-{env}.der, di mana{env}merepresentasikan lingkungan berbeda, seperti dev, sit, atau prod.
Konfigurasikan kunci publik
Pada Konsol untuk lingkungan yang sesuai, pilih Code Management > Interface Keys > Configure di panel navigasi sebelah kiri. Konfigurasikan kunci publik RSA yang sesuai dengan kunci privat Anda.
Perintah berikut menunjukkan cara menghasilkan pasangan kunci RSA. Konfigurasikan kunci publik di Konsol. Konfigurasikan file kunci privat di ${privateKeyPath} pada aplikasi Backend Anda:
* the way to generate key pair:
* ### Generate a 2048-bit RSA private key
*
* $ openssl genrsa -out private_key.pem 2048
*
* ### Convert private Key to PKCS#8 format (so Java can read it)
*
* $ openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt
*
* ### Output public key portion in DER format (so Java can read it)
*
* $ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der
*
* ### change to base64:
*
* ## The generated private key, to be configured in the backend application
* $ openssl base64 -in private_key.der -out private_key_base64.der
*
* ## The generated public key, to be configured in Interface Keys in the console
* $ openssl base64 -in public_key.der -out public_key_base64.der
*
* ### remember to clear the whitespace chars and line breaks before submit!!!Spring method
Pada file konfigurasi spring dari bundle yang sesuai, deklarasikan bean Spring untuk layanan yang telah didefinisikan.
<bean id="mockRpc" class="com.alipay.gateway.spi.mpc.test.MockRpcImpl"/>Pada file konfigurasi spring dari bundle yang sesuai, deklarasikan bean starter yang mengekspos layanan tersebut.
Antarmuka
MpcServiceStartermendaftarkan semua bean yang memiliki anotasiOperationTypeke registri yang ditentukan menggunakan protokol mpaaschannel.<bean id="mpcServiceStarter" class="com.alipay.gateway.spi.mpc.MpcServiceStarter"> <property name="registryUrl" value="${registy_url}"/> <property name="appName" value="${app_name}"/> <property name="workspaceId" value="${workspace_id}"/> <property name="projectName" value="${project_name}"/> <property name="privateKeyPath" value="${privatekey_path}"/> </bean>
Metode Spring Boot
Metode Spring Boot pada dasarnya sama dengan metode Spring. Satu-satunya perbedaan adalah Anda menggunakan anotasi untuk pendaftaran, bukan file konfigurasi XML.
Gunakan anotasi untuk mendaftarkan layanan yang telah didefinisikan sebagai bean:
@Service public class MockRpcImpl implements MockRpc{ }Gunakan anotasi untuk mendefinisikan starter yang mengekspos layanan tersebut:
@Configuration public class MpaaschannelDemo { @Bean(name="mpcServiceStarter") public MpcServiceStarter mpcServiceStarter(){ MpcServiceStarter mpcServiceStarter = new MpcServiceStarter(); mpcServiceStarter.setWorkspaceId("${workspace_id}"); mpcServiceStarter.setAppName("${app_name}"); mpcServiceStarter.setRegistryUrl("${registy_url}"); mpcServiceStarter.setProjectName("${project_name}"); mpcServiceStarter.setPrivateKeyPath("${privatekey_path}"); return mpcServiceStarter; } }
Konfigurasikan Log MPC
Untuk memudahkan troubleshooting, Anda dapat mengonfigurasi log terkait MPC. Contoh berikut menunjukkan konfigurasi log4j:
<!-- [MPC Logger] tenant link, records connection establishment and settings information -->
<appender name="MPC-TENANT-LINK-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${log_root}/mpaaschannel/tenant-link.log"/>
<param name="append" value="true"/>
<param name="encoding" value="${file.encoding}"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%X{remoteAddr}][%X{uniqueId}] %-5p %c{2} - %m%n"/>
</layout>
</appender>
<!-- [MPC Logger] records data related to a stream (including a pair of tenant stream <-> component stream) -->
<appender name="MPC-STREAM-DATA-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${log_root}/mpaaschannel/stream-data.log"/>
<param name="append" value="true"/>
<param name="encoding" value="${file.encoding}"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%X{remoteAddr}][%X{uniqueId}] %-5p %c{2} - %m%n"/>
</layout>
</appender>
<!-- [MPC Logger] tenant log -->
<logger name="TENANT-LINK-DIGEST" additivity="false">
<level value="INFO" />
<appender-ref ref="MPC-TENANT-LINK-APPENDER" />
<appender-ref ref="ERROR-APPENDER" />
</logger>
<!-- [MPC Logger] component log -->
<logger name="STREAM-DATA-DIGEST" additivity="false">
<level value="INFO" />
<appender-ref ref="MPC-STREAM-DATA-APPENDER" />
<appender-ref ref="ERROR-APPENDER" />
</logger>Hasil
Setelah menyelesaikan langkah-langkah ini, Anda dapat melakukan beberapa operasi di gerbang untuk mengekspos layanan API kepada client. Untuk informasi selengkapnya, lihat Daftarkan API.