[dancer-users] Problems writing a Plugin
Alfonso Pinto
alfonso.pinto at gmail.com
Fri Oct 13 14:29:09 BST 2017
Dear all,
I'm trying to write a Dancer2::Plugin to maintain ZMQ socket and send some
information to a backend when a request is received.
This is the plugin :
> package Dancer2::Plugin::ZMQ;
>
>
> use Dancer2::Plugin;
>
>
> use ZMQ::FFI;
>
> use ZMQ::FFI::Constants qw(ZMQ_REQ);
>
>
> has host => (is => 'ro');
>
> has identity => (is => 'ro');
>
>
> has _context => (is => 'ro', lazy_build => 1);
>
> sub _build_context {
>
> my $plugin = shift;
>
> return ZMQ::FFI->new();
>
> }
>
>
> has client => (is => 'ro', lazy_build => 1, plugin_keyword => 'zmq');
>
> sub _build_client {
>
> my $plugin = shift;
>
>
> my $client = $plugin->_context->socket(ZMQ_REQ);
>
> $client->set_identity = $plugin->config->{identity} . "-$$";
>
> $client->connect($plugin->config->{host});
>
> return $client;
>
> }
>
>
> 1;
>
This is my config.yml:
plugins:
> ZMQ:
> identity: "api-gw"
> host: "tcp://proxy:6660"
And this is how I use it in one route:
post '/' => sub {
my $message = body_parameters->get('message');
zmq->send(message =>$message);
my $reply = zmq->recv();
return {"reply" => $reply};
};
The issue is that I get this error:
> Router exception: Can't call method "send" on an undefined
I don't understand why it's not keeping the client instantiated. What is
wrong withmy approach? What I don't want is to create a socket for each
request received.
And before someone asks, the backend is working and replying. A simple
script like this one works in my setup:
use v5.10;
> use ZMQ::FFI qw(ZMQ_REQ);
>
my $endpoint = "tcp://proxy:6660";
> my $ctx = ZMQ::FFI->new();
>
my $s1 = $ctx->socket(ZMQ_REQ);
> $s1->connect($endpoint);
>
$s1->send('ohhai');
> print $s1->recv();
Thanks in advance.
Regards,
Alfonso
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20171013/bd03e277/attachment.html>
More information about the dancer-users
mailing list