Closed Allan-Nava closed 7 years ago
I used Lyra library but when the client lost connection, it still create a new connections.
This is my subiscribe method:
`
private void subscribe(final Handler handler)
{
subscribeThread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
//connection = connectionFactory.newConnection();
connection = MySingletonConnection.getInstance().getConnection();
//connection = Connections.create(options, config);
Channel channel = connection.createChannel();
// Declare a queue and bind it to an exchange.
com.rabbitmq.client.AMQP.Queue.DeclareOk q = channel.queueDeclare("manager2box-"+ROUTING_KEY, true, false, true, null);
channel.queueBind(q.getQueue(), EXCHANGE, ROUTING_KEY);
// Create the QueueingConsumer and have it consume from the queue
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(q.getQueue(), false, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
Log.d(TAG, message);
Message msg = handler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putString("commandBundle", message);
msg.setData(bundle);
handler.sendMessage(msg);
}
} catch (InterruptedException e) {
Log.d(TAG, "InterruptedException");
e.printStackTrace();
break;
} catch (Exception e1) {
Log.d(TAG, "Connection broken: " + e1.getClass().getName());
e1.printStackTrace();
try {
Thread.sleep(5000); //sleep and then try again
} catch (InterruptedException e) {
Log.d(TAG, "InterruptedException");
e.printStackTrace();
break;
}
}
}
}
});
subscribeThread.start();
}
This is my SingletonConnection:
public class MySingletonConnection{
public static final MySingletonConnection INSTANCE = new MySingletonConnection();
private static Connection connection;
private final String TAG = "MySingletonConnection";
private final String EXCHANGE = "manager2box";
private final String USERNAME = "manager";
private final String PASSWORD = "MGXxXq72HscXzakR";
//private final String HOST = "192.168.1.147";
private final String HOST = "portal.seafy.me";
private final String ROUTING_KEY = Utils.getIPAddress();
private Config config;
private ConnectionOptions options;
private MySingletonConnection(){
//Lyra config
config = new Config()
.withConnectionListeners()
.withRecoveryPolicy(RecoveryPolicies.recoverAlways())
.withRetryPolicy(new RetryPolicy()
.withMaxAttempts(20)
.withInterval(Duration.seconds(5))
.withMaxDuration(Duration.minutes(5)));
//Lyra option config for connection
options = new ConnectionOptions().withUsername(USERNAME)
.withRequestedHeartbeat(Duration.seconds(30))
.withPassword(PASSWORD)
.withHost(HOST)
.withPort(5672);
try {
connection = Connections.create(options, config);
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
public static MySingletonConnection getInstance(){
return INSTANCE;
}
public Connection getConnection( ) {
return connection;
}
}
`
Are you sure that opening new connections and channels in a while(true)
loop is really necessary?
Any client with that kind of code would produce a connection storm.
This should be closed as it has nothing to do with Lyra. The same question was answered in a RabbitMQ Java client issue and on rabbitmq-users.
Ok thanks a lot!
2017-07-03 18:11 GMT+02:00 Michael Klishin notifications@github.com:
This should be closed as it has nothing to do with Lyra. The same question was answered in a RabbitMQ Java client issue https://github.com/rabbitmq/rabbitmq-java-client/issues/287 and on rabbitmq-users https://groups.google.com/forum/#!topic/rabbitmq-users/bLLck08qA1Y.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/jhalterman/lyra/issues/79#issuecomment-312685309, or mute the thread https://github.com/notifications/unsubscribe-auth/AVdMg5MWg_wmV6Sd20K8ob3ZET5bMsf4ks5sKRLLgaJpZM4OMYvl .
Duplicate of #75, addressed by #82.
Hi,
i'm using java api client with Automatic Recovery but every time it loses the connection, when it reconnects it creates a new connection on a different port. That the lost connection remain visible in the dashboard and it isn't automatically deleted after a timeout. The problem is that the lost connections are hundreds in my environment! At some point the connections are that much that the dashboard is totally not usable anymore, it slows down and it doesn't load. The environment I am working on loses the connection frequently.
Is it possibile use the same connection when it tries to reconnect?
Thanks in advance