[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