Unable to Access RabbitMQ in the Lan [Windows] - rabbitmq

I am trying to access RabbitMQ server in my LAN network, both computers use Windows 7. In my server computer it is running fine, and I can post message in the queue using celery. I verified that the server is running by running
rabbitmqctl status
Also I have a simple celery code for testing:
from celery import Celery
#app = Celery('hello', broker='amqp://guest#172.16.17.227//') #this is my lan ip
app = Celery('hello', broker='amqp://guest#localhost//')
#app.task
def add(x, y):
return x + y
When I run this command,
celery -A celery_test worker --loglevel=info
it says
celery#I-USER ready.
However,
When I try to connect to my server computer from a different machine in the same network with the same celery code except by replacing it with the IP of my computer,
app = Celery('hello', broker='amqp://user:user#172.16.17.227//')
it says, Cannot connect to amqp://user:**#172.16.17.227//: timed out.
Side Note: I have two users, both of them are administrator. The reason is that docs say guest is not allowed to connect without loopback. When I run rabbitmqctl I get :
guest [administrator]
user [administrator]
My configuration is default (i.e. there is no rabbitmq.config file under %APPDATA%/RabbitMQ folder.
At this point I am running out of ideas. Any Ideas on how to connect to RabbitMQ from a different computer?
Thanks

Related

Cannot Connect Other Computers to Selenium Grid

I am able to register nodes to the hub when I'm working on just one computer, but when I try to connect a node that is running on another computer I get a timeout or a message saying the hub must be down or not responding. I have no idea how to solve this.
After starting the hub I get the message: Nodes should register to http:192.168...:4444/grid register.
A tutorial said that
"you can check if Machine B can access the hub's web interface by launching a browser there and going to where "iporhostnameofmachineA" should be the IP address or the hostname of the machine where the hub is running. Since Machine A's IP address is 192.168.1.3, then on the browser on Machine B you should type >http://192.168.1.3:4444/grid/console."
But chrome is giving me a "This site can't be reached error". This must be an issue with my network configuration, but I do not how what I should do to fix it.
I would try using the command 'telnet 192.168.1.3 4444' from your Selenium node and see if it connects. On the machine running the hub, (so 192.168.1.3) run 'netstat -antp | grep 4444' (assuming it's a linux machine) and make sure you see an entry showing that the port is being listened on. If it's a windows machine you can still use netstat but not grep I think. Once you confirm that the hub is indeed listening on port 4444, and you can ping 192.168.1.3, but cannot telnet to port 4444, you have basically determined that there is a firewall issue. Then you would need to look into the firewalls on both machines, and any firewalls between them.

Cannot connect to VM in bluemix UK Area via SSH

Has anybody tried out virtual machines in the UK area of bluemix?
I am able to start a vm but get an timeout when i try so connect to the vm via ssh.
I used the std Debian image that can be choosen on setup time and injected an ssh key for connecting. The security group I used was allow_all.
When trying to ping or to connect via ssh directly or the openstack cli the connection times out.
regards
Johannes
There was a bug in the setup of the vm, so I actually had no chance to access it.

Java RabbitMQ configuration

I am new in using rabbitMQ and I am trying to sent an 'hello' message over internet,
I am implementing the example available in the rabbitMQ website Java RabbitMQ Hello world example, but in the example they use localhost, I try to change it to the IP address for the sender and receiver computer as explained at the website and put the sender code at a machine and receiver code on another, but it doesn't work.
My questions:
1) is rabbitMQ works over internet or it works just over local network?
2) in both cases, how to configure each computer and what each one should have?
3) Do I need to install rabbitMQ on both machines? or on one of them to run it a server?
Please if anyone can help me in configure them step-by-step, get me an answer with details.
It is a grant problem.
The user guest guest ( default for rabbitmq ) works only in localhost.
Please read this post:
Can't access RabbitMQ web management interface after fresh install
and also this:
RabbitMQ 3.3.1 can not login with guest/guest
To enable guest guest and/or create a new user.
The best practice is to create another user.
Let me answer your questions one by one
1) Yes. RabbitMQ should work over internet, you should be able to connect by giving the public ip of the RabbitMQ server. If you connecting to a server with username/password enabled then it should be provided while creating the connection.
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("username");
factory.setPassword("pwd");
2) One of the machines should have the RabbitMQ server(broker) installed and running. You can produce or consume messages from any of the machines using Java RabbitMQ client. If you had 3 machines then all three, the RabbitMQ server, message producer and message consumer could be on 3 machines.
3) You don't need to install RabbitMQ on both the machines. Install only on the machine which is running as server.

RabbitMQ Shovel plugin stuck on "starting" status

RabbitMQ starts up just fine, but the shovel plugin status is listed as "starting".
I'm using the following rabbitmq.config:
Each broker is running on a separate AWS instance. The remote server is windows 2008 server, the local server is Amazon Linux.
[{rabbitmq_shovel,
[{shovels,
[{scrape_request_shovel,
[{sources, [{broker,"amqp://test_user:test_password#localhost"}]},
{destinations, [{broker, "amqp://test_user:test_password#ec2-###-##-###-###.compute-1.amazonaws.com"}]},
{queue, <<"scp_request">>},
{ack_mode, on_confirm},
{publish_properties, [{delivery_mode, 2}]},
{publish_fields, [{exchange, <<"">>},
{routing_key, <<"scp_request">>}]},
{reconnect_delay, 5}
]}
]
}]
}].
Running the following command:
sudo rabbitmqctl eval 'rabbit_shovel_status:status().'
returns:
[{scrape_request_shovel,starting,{{2012,7,11},{23,38,47}}}]
According to This question, this can result if the users haven't been set up correctly on the two brokers. However, I've double-checked that I've set up the users correctly via rabbitmqctl user_add on both machines -- have even tried it with a different set of users, to be sure.
I also ran an nmap scan of port 5672 on the remote host to verify is was up and running on that port.
UPDATE Problem isn't solved but this does appear to be a result of connection problems with the remote server. I changed "reconnect_delay" to 0 in my config file, to avoid having shovel infinitely re-try the connection. Highly recommend others with this problem do this as well, as it allows you to get error messages out of rabbit_shovel_status. In my case I got the following error:
[{scrape_request_shovel,
{terminated,
{{badmatch,{error,access_refused}},
[{rabbit_shovel_worker,make_conn_and_chan,1},
{rabbit_shovel_worker,handle_cast,2},
{gen_server2,handle_msg,2},
{proc_lib,init_p_do_apply,3}]}},
{{2012,7,12},{0,4,37}}}]
Answering my own question here, in case others encounter this issue. This error (and also a timeout error if you get it, {{badmatch,{error,etimedout}}, ), is almost certainly a communications problem between the two machines, most likely due to port access / firewall settings.
There were a couple of dumb things I was doing here:
1) Was using the wrong DNS for my remote EC2 instance (D'oh! really dumb -- can't tell you how long I spent banging my head against the wall on this one...). Remember that stopping and starting your instance generates a new DNS, if you don't have an elastic IP associated with the instance.
2) My remote instance is a windows server, and I realized you have to open up port 5672 both in windows firewall and in EC2 security groups -- there are two overlapping levels of access controls here, and opening up the port in the EC2 management console isn't sufficient if your machine is windows server on EC2, as you also have to configure the windows server firewall.

How to ensure that a machine name is valid and running?

I have a wcf service deployed on mulitple machines on the intranet. User can access the machine through internet by connecting its machine through SSL (secured connection of the client network).
User has a client application to consume web service deployed on mulitple machine on client network.
I get the machine name from the client and dynamically create the url to create the client of the web service in client application as below:
https://machine_name//test/testservice.svc
What will be the best approach to check if the machine on which client is trying to connect is valid and running(up)?
There could be mulitple condting when timeout is expired like network delay in among one of the cause..
you can try and open a telnet on the port you're calling.
if it timed out - there is a problem.
if you want to do it in more stages
1. run nslookup (to see if the ip-name is defind right)
2. run ping (to see if the machine is alive - if there is no firewall that blocks it)
3. run telnet to the listening port.
What I do - I always publish a test method on the WCF service - that doesn't do anything but returns true - so I can check the service fast.
I would recommend using these three commands:
# check we can resolve the host name
host machine_name
# net cat, to check if the port is open
nc -vz machine_name 443
# curl to see if the service is responding at the given URL
curl -I https://machine_name//test/testservice.svc
The above commands can be run from within a Cygwin/Unix shell. To do the same within a .NET project, you can download libcurl-net. The curl command/library call will do a complete check, and if it fails it should be able to tell you approximately where the problem is.