実行可能なスレッドに接続情報を渡す際に問題が発生します(rabbitmqを使用しますが、これはrabbitmqに固有のものではなく、何にでも適用できると思います)。私の目標は、いくつかのワーカースレッドでキューからの作業を処理することですが、毎回接続を開いたり閉じたりするオーバーヘッドは必要ありません。
コードはrunnableなしで動作します(実際にはrabbitmqチュートリアルから盗まれます)が、接続を渡すrunnableを実装するとすぐに、doWork()でこのエラーが発生します:runnable
The method doWork(Channel, String) is undefined for the type Worker
からChannelを削除して送信しないと、プログラムは動作します正常ですが、接続情報が渡されていません。私に何ができる?
これが私のコードです:
//this is the standard stuff to start a connection
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
channel.basicQos(1);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume("task_queue", false, consumer);
//end of standard stuff
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" [x] Received '" + message + "'");
doWork(channel, message);
System.out.println(" [x] Done" );
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
}
それから:
public class doWork implements Runnable{
protected Channel channel = null;
protected String message = null;
public doWork(Channel channel, String message) {
this.channel = channel;
this.message = message;
}
public void run() {