/[openfoncier]/trunk/services/outgoing/messagesenderSoap.php
ViewVC logotype

Annotation of /trunk/services/outgoing/messagesenderSoap.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1302 - (hide annotations)
Mon Mar 4 11:43:25 2013 UTC (11 years, 11 months ago) by nhaye
File size: 4548 byte(s)
Finalisation de l'envoi de messages SOAP à un web service

1 nhaye 1299 <?php
2    
3     /**
4     * Ce fichier permet de créer un consumeur des messages stockées dans la
5     * pile de RabbitMQ réservée au ERP.
6     *
7     * @package openfoncier
8     */
9     ini_set("soap.wsdl_cache_enabled","0");
10    
11     include_once('../../core/om_debug.inc.php');
12     include_once('../../dyn/services.inc.php');
13    
14     (defined("DEBUG") ? "" : define("DEBUG", EXTRA_VERBOSE_MODE));
15    
16     include_once('../../core/om_logger.class.php');
17    
18     // inclusion de la librairie php-amqplib
19     require_once('../php/php-amqplib/vendor/autoload.php');
20     use PhpAmqpLib\Connection\AMQPConnection;
21    
22     // Si le AMQP_DEBUG est defini a true, les messages DEBUG sont envoyes aux
23     // stdout
24     if (DEBUG > PRODUCTION_MODE) {
25     define('AMQP_DEBUG', true);
26     }
27    
28    
29     /** Utilise pour le test de retour de requete curl
30     */
31     define('HTTP_RESULT_OK', '200');
32    
33     /**
34     * Méthode permettant d'envoyer des messages SOAP
35     */
36     function postViaSOAP($msg) {
37     global $ARRETE_WSDL;
38     global $ARRETE_URL_WS;
39    
40     $data = $msg->body;
41 nhaye 1302 $data = json_decode($data);
42 nhaye 1299
43 nhaye 1302 // Verification que l'url du WSDL est définie
44 nhaye 1299 if (empty($ARRETE_WSDL)) {
45     logger::instance()->cleanLog();
46 nhaye 1302 logger::instance()->log("L'URL de fichier WSDL", EXTRA_VERBOSE_MODE);
47 nhaye 1299 logger::instance()->writeLogToFile();
48     return;
49     }
50 nhaye 1302
51     // Instanciation du client SOAP
52     $soapClient = new SoapClient($ARRETE_WSDL,array("trace" => AMQP_DEBUG));
53 nhaye 1299
54     $error = 0;
55 nhaye 1302
56     // Tentative d'appel de la méthode ws_Send_Chronos_Arret du serveur SOAP
57 nhaye 1299 try {
58 nhaye 1302 $info = $soapClient->ws_Send_Chronos_Arret($data);
59     // accuse de reception du message
60     $msg->delivery_info['channel']->
61     basic_ack($msg->delivery_info['delivery_tag']);
62 nhaye 1299 } catch (SoapFault $fault) {
63 nhaye 1302 // Gestion d'erreurs
64 nhaye 1299 $error = 1;
65 nhaye 1302
66 nhaye 1299 logger::instance()->cleanLog();
67     logger::instance()->log("Erreur ".$fault->faultcode." : ".$fault->faultstring, EXTRA_VERBOSE_MODE);
68     logger::instance()->writeLogToFile();
69 nhaye 1302 // le resultat de l'execution de curl indique un erreur
70     // dors un peu avant de refuser le message
71     sleep(2);
72     // refuse le message
73     $msg->delivery_info['channel']->basic_reject(
74     $msg->delivery_info['delivery_tag'], true);
75 nhaye 1299 }
76 nhaye 1302
77     // envoie un message avec la chaine "quit" pour ce consumeur
78     if ($msg->body === 'quit') {
79     $msg->delivery_info['channel']->
80     basic_cancel($msg->delivery_info['consumer_tag']);
81     }
82 nhaye 1299
83 nhaye 1302 // Retour de la méthode ws_Send_Chronos_Arret (à utiliser si besoin)
84     // $info->ws_DA_Out_4D_vError
85     // $info->ws_DA_Out_Chrono_Arret_ADS
86     // $info->ws_DA_Out_N_Doss_ADS
87 nhaye 1299 }
88    
89     // si le $argv[1] manque on ne peut pas cree un tag unique pour le
90     // consumeur et dans ce cas-la on termine l'execution
91     $suffix = '';
92     if (!empty($argv) && count($argv) > 1) {
93     $suffix = $argv[1];
94     } else {
95     logger::instance()->log('Missing the command line argument used for tag suffix',
96     EXTRA_VERBOSE_MODE);
97     logger::instance()->writeLogToFile();
98     exit;
99     }
100    
101     // un exchange fait le routage des messages vers les piles
102     $exchange = 'routerSoap';
103    
104     // on va utiliser la pile $ARRETE_QUEUE
105     $queueArrete = $ARRETE_QUEUE;
106     // l'identifiant unique de consumeur ; il est utilise par RabbitMQ
107     $consumer_tag = 'consumerSoap'.$suffix;
108    
109     // etablis une connexion avec RabbitMQ instance
110     $conn = new AMQPConnection($RMQ_CONNECTION_HOST, $RMQ_CONNECTION_PORT,
111     $RMQ_CONNECTION_USER, $RMQ_CONNECTION_PASSWORD,
112     $RMQ_CONNECTION_VHOST);
113    
114     // obtiens un canal de la connexion
115     $ch = $conn->channel();
116     // si le canal n'est pas disponible arretes l'execution
117     if (is_null($ch)) {
118     // probleme avec la connexion, log le fait et arrete l'execution
119     logger::instance()->log('Probleme dans l\'etablisement de la connexion',
120     EXTRA_VERBOSE_MODE);
121     logger::instance()->writeLogToFile();
122     exit;
123     }
124    
125     // declare une pile (la creer s'il faut)
126     $ch->queue_declare($queueArrete, false, true, false, false);
127    
128     // declare un exchange qui va diriger les messages
129     $ch->exchange_declare($exchange, 'direct', false, true, false);
130    
131     // relier la pile d'arrete au exchange
132     $ch->queue_bind($queueArrete, $exchange);
133    
134     // registre le callback pour ce consumer aupres de RabbitMQ
135     $ch->basic_consume($queueArrete, $consumer_tag, false, false, false, false, 'postViaSOAP');
136    
137     // loop as long as the channel has callbacks registered
138     while (count($ch->callbacks)) {
139     $ch->wait();
140     }
141    
142     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26