Qu'est-ce Qu'Apache Camel?

Je ne comprends pas ce que fait exactement Camel .

Si vous pouviez donner en 101 mots une introduction à Camel:

  • Qu'est-ce que c'est exactement?
  • Comment interagit-il avec une application écrite en Java?
  • est-ce quelque chose qui va de pair avec le serveur?
  • est - ce un programme indépendant?

Veuillez expliquer ce Qu'est le chameau.

1153
demandé sur Ravindra babu 2012-01-13 06:32:18

20 réponses

Si vous avez 5 à 10 minutes, je recommande généralement aux gens de lire cette Intégration avec Apache Camel par Jonathan Anstey. C'est un morceau bien écrit qui donne une brève introduction et un aperçu de certains concepts de Camel, et il implémente un cas d'utilisation avec des exemples de code. Dans ce document, Jonathan écrit:

Apache Camel est un framework Java open source qui vise à rendre l'intégration plus facile et plus accessible aux développeurs. Il le fait en fournissant:

  • implémentations concrètes de tous les modèles d'intégration d'entreprise largement utilisés (EIPs)
  • connectivité à une grande variété de transports et D'API
  • langages spécifiques au domaine (DSL) faciles à utiliser pour câbler les EIPs et les transports ensemble

Il y a aussi un chapitre libre de Camel in Action qui introduit Camel dans le premier chapitre. Jonathan est co-auteur de ce livre avec moi.

614
répondu Claus Ibsen 2015-12-08 09:53:25

Ma prise pour décrire cela d'une manière plus accessible...

Pour comprendre ce Qu'est Apache Camel, vous devez comprendre quels sont les modèles d'intégration D'entreprise.

Commençons par ce que nous savons probablement déjà: le modèle Singleton, le modèle D'usine, etc; Ce ne sont que des moyens d'organiser votre solution au problème, mais ce ne sont pas des solutions elles-mêmes. Ces modèles ont été analysés et extraits pour le reste d'entre nous par le Gang des quatre, quand ils ont publié leur livre: modèles de conception . Ils ont sauvé certains d'entre nous d'énormes efforts pour réfléchir à la meilleure façon de structurer notre code.

Tout comme le Gang des quatre, Gregor Hohpe et Bobby Woolf ont écrit le livre Enterprise Integration Patterns (EIP) dans lequel ils proposent et documentent un ensemble de nouveaux modèles et blueprints pour savoir comment nous pourrions mieux concevoir de grands systèmes basés sur des composants, où les composants peuvent fonctionner sur le même processus machine.

Ils proposent essentiellement que nous structurions notre système pour qu'il soit orienté message - où les composants communiquent entre eux en utilisant des messages comme entrées et sorties et absolument rien d'autre. Ils nous montrent un ensemble complet de modèles que nous pouvons choisir et mettre en œuvre dans nos différents composants qui formeront ensemble l'ensemble du système.

Alors, Qu'est-ce que Apache Camel?

Apache Camel vous propose les interfaces pour les EIPs, la base objets, implémentations couramment nécessaires, outils de débogage, un système de configuration et de nombreux autres assistants qui vous feront économiser une tonne de temps lorsque vous souhaitez implémenter votre solution pour suivre les EIPs.

Prenez MVC. MVC est assez simple en théorie et nous pourrions l'implémenter sans aide de framework. Mais les bons frameworks MVC nous fournissent la structure prête à l'emploi et ont fait un effort supplémentaire et ont pensé à toutes les autres choses" secondaires " dont vous avez besoin lorsque vous créez un grand projet MVC et c'est pourquoi nous utilisons la plupart du temps.

C'est exactement ce Qu'Apache Camel est pour EIPs. C'est un cadre complet prêt pour la production pour les personnes qui veulent implémenter leur solution pour suivre les EIPs.

950
répondu Amr Mostafa 2012-11-26 12:19:23

La création d'une description du projet ne devrait pas être compliquée.

Je dis:

Apache Camel est la technologie de messagerie colle avec routage. Il réunit les points de début et de fin de messagerie permettant le transfert de messages de différentes sources vers différentes destinations. Par exemple: JMS - > JSON, HTTP -> JMS ou entonnoir FTP -> JMS, HTTP -> JMS, JSON -> JMS

Wikipédia dit:

Apache Camel est un routage et une médiation basés sur des règles moteur qui fournit une implémentation basée sur des objets Java des modèles D'intégration D'entreprise à l'aide D'une API (ou d'un langage spécifique au domaine Java déclaratif) pour configurer les règles de routage et de médiation. Le langage spécifique au domaine signifie Qu'Apache Camel peut prendre en charge l'achèvement intelligent et sécurisé des règles de routage dans votre IDE en utilisant du code Java régulier sans énormes quantités de fichiers de configuration XML; bien que la configuration XML à L'intérieur de Spring soit également prise en charge.

Tu vois? Ce n'était pas dur a été il?

637
répondu David Newcomb 2015-01-06 22:56:57

En bref:

Lorsqu'il est nécessaire de connecter / intégrer des systèmes, vous devrez probablement vous connecter à une source de données, puis traiter ces données pour répondre aux besoins de votre entreprise.

Pour ce faire:

1) vous pouvez développer un programme personnalisé qui le ferait (pourrait prendre du temps et difficile à comprendre, à maintenir pour un autre développeur)

2) alternativement, vous pouvez utiliser Apache Camel pour le faire de manière standardisée (il a la plupart des connecteurs déjà développé pour vous, il vous suffit de le configurer et de brancher votre processus logique):

Camel vous aidera à:

  1. consommer des données de n'importe quelle source / format
  2. traiter ces données
  3. données de sortie vers n'importe quelle source / format

En utilisant Apache Camel, vous faciliterez la compréhension / la maintenance / l'extension de votre système à un autre développeur.

Apache Camel est développé avec des modèles D'intégration D'entreprise. Les modèles vous aident à intégrer systèmes dans le bon sens: -)

107
répondu Marcin Wasiluk 2014-05-16 13:54:09

Un diagramme est meilleur que des milliers de description. Ce Diagramme illustre l'architecture de Chameau.

68
répondu CrimsonFantasy 2017-02-08 14:59:03

Chameau envoie des messages de A à B:

entrez la description de l'image ici

Pourquoi tout un cadre pour cela? Eh bien, que faire si vous avez:

  • de nombreux expéditeurs et de nombreux récepteurs
  • une douzaine de protocoles (ftp, http, jms, etc.)
  • de nombreuses règles complexes
    • envoyer un message A aux récepteurs A et B uniquement
    • Envoyer un message B du Récepteur C , comme XML, mais en partie traduire il, enrichir (ajouter des métadonnées) et SI la condition X , puis l'envoyer au récepteur d aussi, mais comme CSV .

Alors maintenant, vous avez besoin de:

  • traduire entre les protocoles
  • colle composants ensemble
  • définir les routes - ce qui va où
  • filtre certaines choses dans certains cas,

Camel vous donne ce qui précède (et plus) hors de la boîte:

entrez la description de l'image ici

Avec une langue DSL cool pour vous de définir le quoi et comment:

  new DefaultCamelContext().addRoutes(new RouteBuilder() {
        public void configure() {
            from("jms:incomingMessages")
                    .choice() // start router rules
                    .when(header("CamelFileName")
                            .endsWith(".xml"))
                    .to("jms:xmlMessages")
                    .when(header("CamelFileName")
                            .endsWith(".csv"))
                    .to("ftp:csvMessages");
}

Voir aussi ce et Ce {[9] } et chameau en Action (comme d'autres l'ont dit, un excellent livre!)

58
répondu Andrejs 2017-04-28 17:53:41

Une des choses que vous devez comprendre, avant D'essayer de comprendre Apache Camel, sont les modèles d'intégration D'entreprise. Tout le monde sur le terrain ne les connaît pas réellement. Bien que vous puissiez certainement lire le livre Enterprise Integration Patterns, un moyen plus rapide de les connaître serait de lire quelque chose comme L'article de Wikipedia sur Enterprise Application Integration.

Si vous avez lu et compris le sujet, vous seriez beaucoup plus susceptible de comprendre le but D'Apache Camel

HTH

46
répondu Crollster 2012-01-13 03:36:48

BASÉ SUR L'ANALOGIE

Le routage à base de chameau peut être compris très facilement en vous mettant dans la peau d'un propriétaire de compagnie aérienne (par exemple.: American Airlines, Jet Airways).

But de "votre compagnie aérienne' est à 'porter' "passagers" d'une ville à une autre dans le monde. Vous utilisez des avions de différentes "compagnies aériennes" comme Boeing, Airbus, HAL pour transporter des passagers.

Les passagers de votre compagnie aérienne utilisent 'airports' de la ville et les débarquent en utilisant le l'aéroport de la ville. Un passager peut "voyager" vers plusieurs villes, mais partout où il doit passer par l'aéroport pour voyager entre l'avion de votre compagnie aérienne et la ville.

Notez qu'un passager "partant" de la ville est essentiellement "arrivant" dans l'avion de votre compagnie aérienne. Et un passeger "arrivant" dans la ville, est essentiellement au départ de l'avion. Puisque nous sommes dans la peau du propriétaire de la compagnie aérienne, le terme "passager d'arrivée" et "passager au départ" sont inversés de notre notions conventionnelles qui sont basées sur la perspective des villes.

La même infrastructure "aéroport" de chaque ville est utilisée par les passagers "au départ" et les passagers "à l'arrivée". Un aéroport fournit une "infrastructure de départ" pour les passagers au départ, ce qui est différent de l '"infrastructure d'arrivée" prévue pour les passagers à l'arrivée.

Les passagers peuvent continuer à faire leur journée à leurs activités en raison de diverses "commodités" fournies à l'intérieur de l'avion par vos compagnies aériennes, tandis que voyager.

En plus de cela, votre compagnie aérienne fournit également des installations de salon pour des traitements spéciaux comme "comprendre la langue locale" et ou vous préparer pour le "voyage".

Permet de remplacer quelques mots / phrases utilisés ci-dessus par ce qui suit:

Votre compagnie aérienne: Apache Camel

Compagnies aériennes: mécanismes de Transport

L'avion de votre compagnie aérienne: le mécanisme de transport sous-jacent D'Apache Camel

Réaliser: itinéraire

Passagers: message;

Ville: système;

Aéroport: Composant Chameau;

Comprendre les langues locales: Type Conversions;

Départ: production, produit

Arriver: consommer, consommé

Voyage: acheminé

Équipements: fourni

Après avoir remplacé les mots, voici ce que vous obtenez:

But "d'Apache Camel' est d'acheminer des messages " d'un système à un autre dans le monde. Apache camel utilise différents mécanismes de transport pour le routage des messages.

Apache Camel récupère les messages en utilisant le composant basé sur Camel du système 'from' et les dépose en utilisant le composant basé sur Camel du système 'to'. Un message peut être acheminé vers plusieurs systèmes, mais partout ils doivent passer par des "composants basés sur Camel" pour voyager entre le "mécanisme de transport sous-jacent D'Apache Camel" et le système.

Notez qu'un message 'produit' à partir du système est essentiellement 'consommé' dans le transport sous-jacent D'Apache Camel mécanisme". Et un message consommé par un système, est essentiellement produit par le "mécanisme de transport sous-jacent D'Apache Camel".

Puisque nous essayons de comprendre Camel, nous devons penser du point de vue de Camel ici. Le sens des termes "message du consommateur" et "message du producteur" est donc inversé par rapport à nos notions conventionnelles qui sont basées sur la perspective d'un système.

La même infrastructure de codage 'Camel based Component' est utilisée par 'producer message' et 'message des consommateurs'. Un "composant basé sur Camel" fournit un "point de terminaison producteur "pour" message producteur "et un" point de terminaison consommateur "pour" message consommateur".

Les Messages peuvent être traités par Camel lorsqu'ils sont acheminés.

En plus de ce routage, Camel fournit des fonctionnalités spéciales comme la "conversion de Type" et bien d'autres...

44
répondu DolphinJava 2015-04-13 12:54:21

Si vous connaissez des modèles D'intégration D'entreprise, Apache Camel est un framework d'intégration qui implémente tous les EIPs.

Et vous pouvez déployer Camel en tant qu'application autonome dans un conteneur web.

Fondamentalement, si vous devez intégrer plusieurs applications avec différents protocoles et technologies, vous pouvez utiliser Camel.

34
répondu Neel 2012-01-13 02:59:38

Une définition d'un autre point de vue:

Apache Camel est un framework d'intégration. Il se compose de certaines bibliothèques Java, ce qui vous aide à implémenter des problèmes d'intégration sur la plate-forme Java. Ce que cela signifie Et comment cela diffère des API d'un côté et d'un Bus de service D'entreprise (ESB) de l'autre côté est décrit dans mon article "Quand utiliser Apache Camel".

23
répondu Kai Wähner 2013-03-16 17:08:43

Qu'est-ce que c'est exactement?

Apache Camel est un framework d'intégration léger qui implémente tous les modèles d'intégration D'entreprise.Vous pouvez facilement intégrer différentes applications en utilisant les modèles requis.

Vous pouvez utiliser Java, Spring XML, Scala ou Groovy. Presque toutes les technologies que vous pouvez imaginer sont disponibles, par exemple HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty etc.

Jetez un oeil à cet article et modèle EIP article

Comment interagit-il avec une application écrite en Java?

Camel utilise un langage spécifique au domaine Java ou DSL pour créer des modèles d'intégration D'entreprise ou des Routes dans une variété de langages spécifiques au domaine (DSL) comme indiqué ci-dessous.

Java DSL - un DSL basé sur Java utilisant le style fluent builder.

L'histoire du modèle D'intégration D'entreprise se résout autour de ces concepts :

Message, point final, producteur, consommateur, routage, Bus, transformation et processus .

Jetez un oeil à cet article par Anirban Konar pour l'un des cas d'utilisation en temps réel.

Est-ce quelque chose qui va de pair avec le serveur?

Il agit comme un pont entre plusieurs sous-systèmes d'entreprise.

Est - ce un programme indépendant?

Apache Camel, un framework d'intégration, intègre différents application.

L'avantage majeur de Camel : Vous pouvez intégrer différentes applications avec différentes technologies (et différents protocoles) en utilisant les mêmes concepts pour chaque intégration.

14
répondu Ravindra babu 2016-09-09 17:40:50

La plupart des" nouvelles " choses dans l'informatique ne sont pas vraiment Nouvelles du tout, elles ne sont qu'une enveloppe mystifiante autour de quelque chose qui est déjà bien compris. Quand ils sont difficiles à comprendre, c'est généralement parce que quelqu'un a décidé d'inventer de nouveaux termes linguistiques ou de coloniser des termes existants dans un but différent (un bon exemple de que est l'inversion par les développeurs X de ce que "client" et "serveur" signifient.)

Camel est un wrapper/API basé sur Java pour les middlewares inter-applications.

Middleware est un terme général pour les logiciels qui fournissent des services d'interprétation entre des entités qui ne partagent pas un langage ou des types de données communs.

C'est ce Qu'est Camel, en bas. Nous pouvons étoffer la description en notant qu'elle prévoit un middleware de type EIP.

Il ne fournit pas le middleware lui-même, car il ne peut pas connaître les détails de ce que les applications doivent communiquer. Mais il fournit L'API pour créer les parties invariantes de ce middleware (créer un point de départ, créer un point de fin, créer des conditions pour le début et la fin, etc)

J'espère que ça aide.

11
répondu MMacD 2015-09-08 13:10:31

Voici une autre tentative.

Vous savez comment il y a des choses comme Webmethods, Ican Seebeyond, Tibco BW, IBM Broker. Ils ont tous aidé avec des solutions d'intégration dans l'entreprise. Ces outils sont communément appelés outils D'intégration D'applications D'entreprise (EAI).

Il y avait surtout des outils de glisser-déposer construits autour de ces technologies et dans certaines parties, vous deviez écrire des adaptateurs en Java. Ces codes d'adaptateur n'étaient pas testés ou avaient un mauvais outillage / automatisation autour de l'essai.

Tout comme avec les modèles de conception en programmation, vous avez des modèles D'intégration D'entreprise pour les solutions d'intégration communes. Ils ont été rendus célèbres par un livre du même nom par Gregor Hohpe et Bobby Woolf.

Bien qu'il soit tout à fait possible d'implémenter des solutions d'intégration qui utilisent un ou plusieurs EIP, Camel est une tentative de le faire dans votre base de code en utilisant XML, Java, Groovy ou Scala.

Camel prend en charge tous les modèles D'intégration D'entreprise listé dans le livre via son riche mécanisme DSL et routage.

Donc, Camel est un technoloy concurrent d'autres outils EAI avec un meilleur support pour tester votre code d'intégration. Le code est concis en raison des langages spécifiques au domaine (DSL). Il est lisible même par les utilisateurs professionnels et il est gratuit et vous rend productif.

8
répondu skipy 2013-11-27 20:58:29

Il y a beaucoup de frameworks qui nous facilitent la messagerie et la résolution de problèmes dans la messagerie. Un tel produit est Apache Camel.

La plupart des problèmes courants ont des solutions éprouvées appelées modèles de conception. Le modèle de conception pour la messagerie est des modèles D'intégration D'entreprise (EIPs) qui sont bien expliqués ici . Apache camel nous aide à implémenter notre solution en utilisant les EIPs.

La force d'un cadre d'intégration est sa capacité à nous faciliter à travers EIPs ou d'autres modèles, le nombre de transports et de composants et la facilité de développement sur lequel Apache camel se trouve en haut de la liste

Chacun des Frameworks a ses propres avantages certaines des caractéristiques spéciales D'Apache camel sont les suivantes.

  1. Il fournit le codage pour être dans de nombreux DSL à savoir Java DSL et Spring xml basé DSL, qui sont populaires.
  2. utilisation facile et simple à utiliser.
  3. Fuse IDE est un produit qui vous aide à coder UI
7
répondu Naveen Raj 2014-08-11 02:50:59

En anglais simple, camel fait (beaucoup) de choses sans beaucoup de code de Plaque de chaudière.

Juste pour vous donner une perspective, le DSL Java donné ci-dessous va créer un point de terminaison REST qui sera capable d'accepter un XML composé de liste de produits et le divise en plusieurs produits et invoque la méthode de processus de BrandProcessor avec lui. Et juste en ajoutant .parallelProcessing (notez la partie commentée) il traitera en parallèle tous les objets du produit. (Classe de produit est JAXB / XJC généré Java stub à partir du XSD auquel le xml d'entrée est limité.) Ce beaucoup de code (avec quelques dépendances de Camel) fera le travail qui prenait 100s de lignes de code Java.

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);

Après avoir ajouté l'ID de route et l'instruction de journalisation

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);

Ceci est juste un échantillon, chameau est beaucoup plus qu'un simple point final de repos. Il suffit de jeter un oeil à la liste des composants enfichables http://camel.apache.org/components.html

6
répondu KingJulien 2017-09-20 10:54:04

Camel aide au routage, à la transformation, à la surveillance.

Il utilise des Routes; qui peuvent être décrites comme:

lorsque le bus de service reçoit un message particulier, il l'achemine par aucun des services / destinations de courtier tels que la file d'attente/sujets. Ce chemin est connu comme route.

Exemple: votre application stock a obtenu une entrée par l'analyste, elle sera traitée via le composant application / web, puis le résultat sera publié à tous les intéressés / enregistrés membres pour la mise à jour de stock particulier.

5
répondu sa_nyc 2014-08-20 14:34:12

Oui, c'est probablement un peu tard. Mais une chose à ajouter aux commentaires de tout le monde est que, Camel est en fait une boîte à outils plutôt qu'un ensemble complet de fonctionnalités. Vous devez garder cela à l'esprit lors du développement et avoir besoin de faire diverses transformations et conversions de protocole.

Camel lui-même s'appuie sur d'autres frameworks et vous devez donc parfois les comprendre afin de comprendre ce qui convient le mieux à vos besoins. Il y a par exemple plusieurs façons de gérer RESTE. Cela peut devenir un peu déroutant au début, mais une fois que vous commencez à utiliser et à tester, vous vous sentirez à l'aise et votre connaissance des différents concepts augmentera.

4
répondu Souciance Eqdam Rashti 2015-09-22 05:43:24

Dans une entreprise, il existe un certain nombre de systèmes de types différents. Certains d'entre eux peuvent être des systèmes existants tandis que d'autres peuvent être nouveaux. Ces systèmes interagissent souvent les uns avec les autres et doivent être intégrés. Cette interaction ou intégration n'est pas facile car les implémentations des systèmes, leurs formats de messages peuvent différer. Une façon d'y parvenir est de mettre en œuvre un code qui comble ces différences. Cependant, ce sera l'intégration point à point. Si demain encore s'il y a un changement dans un système le d'autres pourraient également être modifié qui n'est pas bon. Au lieu de cette intégration point à point qui provoque un couplage serré, nous pouvons implémenter une couche supplémentaire pour médier les différences entre les systèmes. Il en résulte un couplage lâche et n'affecte pas beaucoup nos systèmes existants. Apache Camel est un moteur de routage et de médiation basé sur des règles qui fournit une implémentation Java basée sur des objets des modèles D'intégration D'entreprise à l'aide D'une API (ou d'un domaine Java déclaratif spécifique Langue) pour configurer les règles de routage et de médiation.
Des Explications détaillées et des exemples peuvent être trouvés ici Apache Camel Tutoriels

3
répondu Rameez 2017-04-08 12:40:04

Apache Camel est un framework Java pour l'intégration D'entreprise. Par exemple: - si vous construisez une application web qui interagit avec de nombreuses API de fournisseurs, nous pouvons utiliser le camel comme outil D'Intégration externe. Nous pouvons en faire plus en fonction du cas d'utilisation. Camel in Action de Manning publications est un excellent livre pour apprendre le chameau. Les intégrations peuvent être définies comme ci-dessous.

Java DSL

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads()
    .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}")
    .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*")
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey
                    + "&bridgeEndpoint=true")
    .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");

Il s'agit simplement de créer un point de terminaison D'API REST qui à son tour appelle une API externe et envoie la demande de retour

Printemps DSL

<route id="GROUPS-SHOW">
    <from uri="jetty://0.0.0.0:8080/showGroups" />
    <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" />
    <to uri="direct:auditLog" />
    <process ref="TestProcessor" />
</route>

Venir à vos questions

  1. Qu'est-ce que c'est exactement? Ans: - c'est un cadre qui implémente des modèles D'intégration D'entreprise
  2. Comment interagit-il avec une application écrite en Java? Ans: - il peut interagir avec tous les protocoles disponibles comme http, ftp, amqp etc
  3. est-ce quelque chose qui va de pair avec le serveur? Réponse:- Il peut être déployé dans un récipient comme tomcat ou peut être déployé indépendamment comme java processus
  4. Est - ce un programme indépendant? Réponse:- Il peut être.

J'espère que ça aide

2
répondu Khader M A 2018-03-01 15:48:31

C'est comme un gazoduc reliant

From---->To

Entre u peut ajouter autant de canaux et de conduites. Le robinet peut être de n'importe quel type automatique ou manuel pour le flux de données et un itinéraire pour canalisent le flux.

Il prend en charge et a une implémentation pour tous les types et types de traitement. Et pour le même traitement de nombreuses approches car il a de nombreux composants et chaque composant peut également fournir la sortie souhaitée en utilisant différentes méthodes en dessous.

Par exemple, Transfert de fichiers peut être fait dans camel avec les types fichier déplacé ou copié et aussi à partir du dossier, serveur ou FILE d'attente.

-from-->To
   - from-->process-->to
   - from-->bean-->to
   - from-->process-->bean-->to
   -from-->marshal-->process-->unmarshal-->to

De / vers - - - - dossier, direct, seda, vm peut être n'importe quoi

1
répondu javalearner_heaven 2017-09-07 08:23:28