parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Когда-то писал простой класс для работы с api rabbit mq - там пример pull(N) через api

sergei v.2 27.11 00:59

@USE
Hash.p

@CLASS
RabbitMQ


###########################################################################
@create[h][HResQueue]
$self.Config[$h.config]
$self.queue[$h.queue]

^if(def $h.config.sign_pass && ^h.is_sign.bool(true)==true){
	$self.sign_pass[$h.config.sign_pass]
}

$HResQueue[^_sendRequest[
	$.url[queues/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/$self.queue]
	$.request_method[GET]
]]

^if(def $HResQueue.error && $HResQueue.error eq 'Object Not Found'){
	$HResQueue[^_sendRequest[
		$.url[queues/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/$self.queue]
		$.request_method[PUT]
		$.data[{"auto_delete":false,"durable":true,"arguments":{}}]
	]]
}


###########################################################################
@push[sValue]
	$result[^_sendRequest[
		$.url[exchanges/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/amq.default/publish]
		$.data[{"properties":{"headers":{^if(def $self.sign_pass){"sign":"^self.getSign[$sValue]"}}},"routing_key":"$self.queue","payload":"^taint[json][$sValue]","payload_encoding":"string"}]
	]]

###########################################################################
@pull[count]

	$result[^_sendRequest[
		$.url[queues/^if($self.Config.vhost ne '/'){$self.Config.vhost}{%2F}/${self.queue}/get]
		$.data[{"count":^count.int(1),"ackmode":"ack_requeue_false","encoding":"auto","truncate":50000}]
	]]

	^if($result.0.properties.headers.sign ne ^getSign[^taint[as-is][$result.0.payload]]){
		^return[^Hash::create[$.error[Неверная сигнатура данных]]]
	}


###########################################################################
@_sendRequest[h]
	$f[^curl:load[
		$.content-type[application/json]
		$.username[$self.Config.user]
		$.password[$self.Config.password]
		$.url[^taint[as-is][$self.Config.url]/api/$h.url]
		^if(def $h.request_method && ($h.request_method eq 'PUT' || $h.request_method eq 'GET' || $h.request_method eq 'DELETE')){
			$.customrequest[$h.request_method]
		}{
			$.post(1)
		}
		$.postfields[$h.data]
		$.charset[UTF-8]
		$.timeout(30)
	]]

$result[^Hash::create[^taint[as-is][$f.text]]]



###########################################################################
@getSign[s]
$result[^math:digest[sha256;${s}${self.sign_pass}]]