Search This Blog

Thursday, July 18, 2019

Cluster - Rabbit MQ Master Slave

RabbitmQ Master & Slave Installation Documents:

apt-get update
apt-get install rabbitmq-server
Enable the plugin - cd /etc/rabbitmq - rabbitmq-plugins enable rabbitmq_management

Master:

vi /etc/rabbitmq/rabbitmq-env.conf
    NODENAME=rabbit@rabbitmaster (must be unique, can be arbitrary)
chown rabbitmq:rabbitmq /etc/rabbitmq/*
chmod 400 /etc/rabbitmq/*
 vi /etc/hosts - add the following line (must match the content after "@" in the rabbitmq-env.conf NODENAME
    127.0.0.1   rabbitmaster
systemctl restart rabbitmq-server - a success message is displayed when the restart completes successfully.

Slave:

vi /etc/rabbitmq/rabbitmq-env.conf
   NODENAME=rabbit@rabbitslave
vi /etc/hosts - add the following lines:
Note:  192.168.7.* is the local IPv4 address of the master server (e.g., 192.x.x.x)

192.168.7.*  rabbitmaster

127.0.0.1   rabbitslave


sudo chown rabbitmq:rabbitmq /etc/rabbitmq/*

ls -a - show the hidden files & folders
ls -la - show the hidden files & folders with permission

execute below commands in master to slave

before copying please take .erlang.cookie in slave server.
scp -r /var/lib/rabbitmq/.erlang.cookie root@192.168.7.189:/var/lib/rabbitmq/
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 600 /var/lib/rabbitmq/.erlang.cookie

systemctl restart rabbitmq-server

execute below commands in master

systemctl restart rabbitmq-server
rabbitmqctl start_app

Before this step, you have to reboot your slave servers. Run this at all slave nodes;

systemctl status rabbitmq-server
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmaster
rabbitmqctl start_app

Execute the below commands in master server

Verify the cluster with running this command at master node;
rabbitmqctl cluster_status
Adding new administrator user
Add a new/fresh user, say user ‘test’ and password ‘test’
rabbitmqctl add_user test test
Give administrative access to the new user
rabbitmqctl set_user_tags test administrator
Set permission to newly created user
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
HA Queues
To make all queues HA run this command at master. With this policy enabled RabbitMQ sync all queues to all nodes.
rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'


Haproxy Load Balace - Both TCP & HTTP [ Rabbitmq and Rest Webservice ]

Example- 
1. HAProxy installed in             192.168.7.11
MQ installed in                          192.168.7.12,            192.168.7.13
REST API also running in        192.168.7.12,             192.168.7.13

2. http://192.168.7.11:8080
3. Run your queue sender to 192.168.7.11:5672
     //MQ send receiver code = http://drvijayy2k2.blogspot.com/2019/07/java-rabbitmq-sample-send-receiver.html


haproxy.cfg

global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3

defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client  50000
timeout server  50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

frontend haproxy_in_ws
    bind *:8080
    mode http
    default_backend haproxy_http_ws

frontend haproxy_in_mq
    bind *:8890
    mode tcp
    default_backend haproxy_tcp_mq

backend haproxy_http_ws
    balance roundrobin
    mode http
    server rabbitmaster 192.168.1.12:8080 check
    server rabbitslave  192.168.1.13:8080 check

backend haproxy_tcp_mq
    balance roundrobin
    mode tcp
    server rabbitmaster 192.168.1.12:5672 check
    server rabbitslave  192.168.1.13:5672 check




Java RabbitMQ - Sample Send Receiver

//path lib setting
set CLASSPATH=.;lib\amqp-client-5.4.1.jar;lib\*.jar;lib\slf4j-api-1.7.26.jar;

//compile
javac TestSender.java

//run
java TestSender


TestSender.java

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class TestSender
{

private final static String QUEUE_NAME = "rmq";

public static void main ( String [] argv ) throws Exception
{
ConnectionFactory factory = new ConnectionFactory ();
factory.setHost ( "192.168.7.11" );
factory.setPort ( 8890 ); //always give HA port to test if you want to do HA testing. else give queue port
factory.setUsername ( "test" );
factory.setPassword ( "test" );
try (Connection connection = factory.newConnection ();
Channel channel = connection.createChannel ())
{
channel.queueDeclare (QUEUE_NAME, true, false, false, null );
String message = "Hello World111!";
channel.basicPublish ( "", QUEUE_NAME, null, message.getBytes ( "UTF-8" ) );
System.out.println ( " [x] Sent '" + message + "'" );
}
}
}


TestReceiver.java

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;

public class TestReceiver
{

private final static String QUEUE_NAME = "rmq";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost ( "192.168.7.13" );
factory.setPort ( 5672 ); //always receive with your default queue port and not HA port
factory.setUsername ( "test" );
factory.setPassword ( "test" );

        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
    }
}



NOTE: channel.queueDeclare (QUEUE_NAME, true, false, false, null ); //if durable else give false instead of true.

Tuesday, July 9, 2019

Python - Construct Json in loop

data={}
for  weightagesObj in weightagesAllObject:
        item = {"weight":weightagesObj.weight, "rank":weightagesObj.rank}
        data[weightagesObj.scrip] = item
nseJson=json.loads ( json.dumps(data) )
print ( nseJson["scrip name"] )



{
"RELIANCE": {
"weightage": 9.04,
"rank": 1
},
"TATAMOTORS": {
"weightage": 9.01,
"rank": 2
}
}

Python - Object of type decimal is not json serializable

Simply add your header like below

import simplejson as json
#import json #remove this line

Tuesday, July 2, 2019

Python - Expecting property key name enclosed in double quotes - String to JSON

import demjson 
result = demjson.decode(' { key: "value" }' )


demjson plugin is very good on this

- Enjoy 

Thursday, June 13, 2019

Subversion - SVN Clean UP - previous operation has not finished

  • Right click on folder
  • Go to TortoiseSVN -> Clean Up...
  • Make sure the option to Break Locks is ticked and click OK

- Enjoy

Wednesday, June 5, 2019

Pre Open Market Walk Through - Weekly Expiry - 05-06-2019

Important -  Monetary Policy announcement, So watch Bank nifty stocks, that impact will be more in Nifty direction.


1. Expiry - Weekly

2. Global Market:
            US            - Flat
            European  - Green
            Asian        - Mixed
           SGX Nifty - Down with 51 pts

3. FII/DII activities 
                 FII are net sellers of 416cr and DII are also net sellers of 355cr.   
                 Generally FII will buy or sell continuesly.

4. Candles - Nifty forms harami or inside bar candle pattern in days candle..
                     So buy above yest high and sell below yest low and day before high/low is Ur stop-loss. Trade the next week option strikes if you go on long to escape from Theta.

                     BANK NIFTY - Tomorrow monetary policy announce at 2:30 or 4PM.  So be caution and play on hedging.. Your hedging premimum price should not [both CE and PE] goes beyond 100 RS combine and also Straddle only. 

5. VIX is at 15.63 is good for bull market. 

6. USD/INR $ - 69.42 but still it has to come below 69 is good for investment or bull market.

7. Result/Events - Monetary policy, expect the rate cut of basis 25 pts, so second half may expect some volatility. But this news already spread and the market is played well already.

   NOTE - Any more rate cut rather than 25 basis pts will take market to upwards of another 100-200 pts in BN.

8. Max Pain   -  Nifty @ 11800, BN @ 31600.

9. FNO Analasis -   Features              - Nifty - Bullish & BN - Neutral
                                 Option PC Ratio - Nifty - Neutral & BN - Neutral

10. Trend Movements - Nifty may end between 11930-12075.





My Trade Plan
#############

#. Already Short Strangle at OTM 11800, 11850,11900 PE and 12150, 12200 CE, BN done hedging [bullish combo spread].

             Nifty [  Close existing positions which ever below 0.5 and shift to next position with minimal until the direction gets cleared. second half may go with ATM short stradle if required].

Already I made VEGA netural, If that strategy fails, then i will play ITM stradle to make delta neutral.


#. LOTS - Confidential*





TRADE WITH CAUTION
HAPPY TRADING
Vijay




- Please feel free to comment and always respected, it will be answered latter.-

Monday, June 3, 2019

Post Market Nifty View - 03-06-2019

#. Vix - 15.97 (-0.62%) decreased- which is good

#. US $ - 69.42  (-0.69%) decreased - so can expect some FII investment

#. Today FII are net buyers involves major money. and nifty totally surge to 12050k + mark.

#. Day Candle - Nifty forms strong bullish candle. But it has near to the major resistance of 12146, once it break and closed. then we have a strong upwards and next major hurdle at 12411 +.

#. wednesday is holiday and thursday monetary policy, hope repo rate will cut by 0.25% and that creates BN volatility ..

#. Short 32100 CE and planning to hedge by tomorrow evening if it close above 31800.

#. Short nifty PE heavily and hedge nifty future and short CE with less qty. I need this expiry to end below 12150 and I can get decent money.


Happy Trading..

Wednesday, May 29, 2019

Post Market Nifty View - 29-05-2019

#. Vix - 16.41 (3.08%) increased
#. US $ - 69.84  (0.23%) increased
#. Day Candle - Nifty forms bearish spining top after yesterday hanging man pattern, so tomorrow we can see further downside if nifty break todays low. 
#. June serious might be bullish once FII, FDI comes inside.



#. Tomorrow is weekly & monthly expiry, so be caution.

Hit Counter


View My Stats