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 |
|
|
?> |