Ag-Merge
Frühlingswolke Cross-Service-Datenaggregations-Framework
Das Problem lösen
Lösen Sie den Schmerz der Aufteilung der Eigenschaften von Paging -Daten nach Aufteilen des Feder -Cloud -Dienstes oder der Attribute einzelner Objekte. Es unterstützt die automatische Injektion und Transformation statischer Datenattribute (Data Dictionary) und dynamische Primärschlüsseldaten, unter denen die aggregierten statischen Daten (Guava) erster Ebene (Guava) gespeichert werden.
Nehmen Sie eine Kastanie:
Zwei Dienste, eine Tabelle in Service A verwendet den Wert einer Tabelle in Service B. Wenn wir die Tabelle in Service A abfragen, aggregieren wir die Werte einer Tabelle im Service B im Abfrageprozess von Service A.
Beispiel
Für einen bestimmten Beispielcode können Sie das Ace-Merge-Demo-Modul sehen.
| -------- ACE-EUREKA-Registrierungszentrum | -------- ACE-DATA-MERGE-DEMO-Abfragedaten, Aggregationsbeispiel hier | ------
Maven fügt Abhängigkeiten hinzu
<De vorhöhe> <gruppe> com.github.wxiaoqi </Groupid> <artifactId> ace-merge-core </artifactid> <version> 2.0-Snapshot </Version> </abhängig>
Empfohlene Lagerkonfiguration
<Repositories> <Repository> <ID> OSS </id> <name> OSS </name> <URL> https://oss.sonatype.org/content/groups/public </url> </repository> </repository> </repositories>
Starten Sie die Klassenannotation
@EnableAcemerge
application.yml -Konfiguration
# Cross-Service-Daten Merge Mucken
Codebeispiel (die Daten des @Mergefield Flag -Objekts müssen aggregiert werden)
@Retention (retentionPolicy.runtime) @target (value = {elementtype.method, elementtype.type, elementtype.field}) public @Interface MergeField { / *** Abfragesteuer* @return* / String Key () Default ""; / *** Zielklasse* @return*/ class <? erweitert Object> Feign () Standard -Objekt.Class; / *** Anrufmethode* @return*/ String -Methode () Standard ""; / *** WERDET STRAGUNGSWERTE ALS ZUGRAFTWERTEN* @RETURN*/ BOOLEAN ISVALUENEEDMERGE () Standard False;} Aggregierte Objekte
public class user {private Zeichenfolge Name; // Attribute, für die Aggregation @MergeField (Key = "test", Feign = iService2.Class, method = "Writelog") private String Sex erforderlich ist; // Attribute, die eine Aggregation erfordern @MergeField (feign = iService2.Class, method = "getCitys", isvalueneedmerge = true) private String City; public user (String -Name, String Sex, String City) {this.name = name; this.sex = sex; this.city = Stadt; } public String getCity () {return city; } public void setCity (String City) {this.city = City; } public user (String name) {this.name = name; } public user (String -Name, String Sex) {this.name = name; this.sex = sex; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String getSex () {Return Sex; } public void setsex (String sex) {this.sex = sex; }} Aggregat -Datenquellenmethode (Beispiel wird über TEIGNCLIENT oder ein lokales Federbohnenobjekt sein)
Spezielle Anforderungen: Der Eintragsparameter muss eine Zeichenfolge sein und der Rückgabewert muss MAP <String, String> sein. Die Zusammensetzung des Rückgabewerts ist der Schlüssel und den entsprechenden Wert des aggregierten Objektattributs.
@FeignClient ("test") public interface iService2 {@RequestMapping ("Car/do") public map <String, String> Writelog (String -Test); @RequestMapping ("Car/City") öffentliche Karte <String, String> getCitys (String -IDs);}Entsprechende Remote -Service -Schnittstelle
/** * @author ace * @create 2017/11/20. */@RastController@requestmapPing ("car") public class Service2rest {private logger logger = loggerfactory.getLogger (service2rest.class); @RequestMapping ("do") public map <String, String> Writelog (String -Test) {logger.info ("Service 2 schreibt Protokoll!"); Karte <String, String> map = new HashMap <String, String> (); map.put ("Mann", "männlich"); map.put ("Frau", "weiblich"); Rückgabekarte; } @RequestMapping ("City") public map <String, String> getCity (String -IDs) {logger.info ("Service 2 schreibt log!"+Ids); Karte <String, String> map = new HashMap <String, String> (); map.put ("1", "Guangzhou"); map.put ("2", "wuhan"); Rückgabekarte; }} Biz -Klasse, die Objekte aggregiert (die folgende Methode besteht darin, die AOP -Scan -Annotation zu verwenden)
@Service @slf4JPublic class UserBiz {@autowired private mergecore mergecore; / ** * Aggregationsmethode der AOP -Annotation * Der Rückgabewert der Aggregationsmethode muss eine Liste sein. ArrayList <Unter> (); für (int i = 1000; i> 0; i--) {user.add (neuer Benutzer ("Zhangsan" + i, "Mann", "1"); users.add (neuer Benutzer ("Lisi" + i, "Frau", "2"); user.add (neuer Benutzer ("Wangwu" + i, "unkonnwn", "2")); } Rückgabebenutzer; } / *** Manuelle Aggregationsmethode* @return* / publiclist <Unter> getUser () {ArrayList <Bener> user> users = new ArrayList <Benerhilfe <Unter> (); für (int i = 1000; i> 0; i--) {user.add (neuer Benutzer ("Zhangsan" + i, "Mann", "1"); users.add (neuer Benutzer ("Lisi" + i, "Frau", "2"); user.add (neuer Benutzer ("Wangwu" + i, "unkonnwn", "2")); } try {// listen aggregation mergecore.mergeresult (user.class, user); // Einzelobjektaggregation // mergecore.mergeone (user.class, user.get (0)); } catch (Ausnahme e) {log.Error ("Datenaggregation fehlgeschlagen", e); } endlich {return user; }}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.