diff --git a/main.go b/main.go
index 35b8779..43f470d 100644
--- a/main.go
+++ b/main.go
@@ -123,7 +123,6 @@ func buildCommand() *cobra.Command {
 func initConfig(cmd *cobra.Command) {
 	if verbose {
 		logrus.SetLevel(logrus.DebugLevel)
-		fmt.Println("DEBUG VIEW")
 	}
 
 	configPath := cmd.Flag("config").Value.String()
@@ -137,6 +136,7 @@ func initConfig(cmd *cobra.Command) {
 		logrus.Warn("Config file not exist. Use environment variables.")
 
 		viper.BindEnv("ACTOR_PEM")
+		viper.BindEnv("BROKER_URL")
 		viper.BindEnv("REDIS_URL")
 		viper.BindEnv("RELAY_BIND")
 		viper.BindEnv("RELAY_DOMAIN")
diff --git a/misc/test/config.yml b/misc/test/config.yml
index fb22d95..d076b48 100644
--- a/misc/test/config.yml
+++ b/misc/test/config.yml
@@ -1,4 +1,5 @@
 # ACTOR_PEM: FILL_WITH_EACH_TEST
+# BROKER_URL: FILL_WITH_EACH_TEST
 # REDIS_URL: FILL_WITH_EACH_TEST
 
 RELAY_BIND: 0.0.0.0:8080
diff --git a/models/config.go b/models/config.go
index 90b84c0..b191373 100644
--- a/models/config.go
+++ b/models/config.go
@@ -19,7 +19,8 @@ type RelayConfig struct {
 	actorKey        *rsa.PrivateKey
 	domain          *url.URL
 	redisClient     *redis.Client
-	redisURL        string
+	brokerURL       *url.URL
+	redisURL        *url.URL
 	serverBind      string
 	serviceName     string
 	serviceSummary  string
@@ -57,8 +58,11 @@ func NewRelayConfig() (*RelayConfig, error) {
 		return nil, errors.New("ACTOR_PEM: " + err.Error())
 	}
 
-	redisURL := viper.GetString("REDIS_URL")
-	redisOption, err := redis.ParseURL(redisURL)
+	redisURL, err := url.ParseRequestURI(viper.GetString("REDIS_URL"))
+	if err != nil {
+		return nil, errors.New("REDIS_URL: " + err.Error())
+	}
+	redisOption, err := redis.ParseURL(redisURL.String())
 	if err != nil {
 		return nil, errors.New("REDIS_URL: " + err.Error())
 	}
@@ -68,12 +72,19 @@ func NewRelayConfig() (*RelayConfig, error) {
 		return nil, errors.New("Redis Connection Test: " + err.Error())
 	}
 
+	brokerURL, err := url.ParseRequestURI(viper.GetString("BROKER_URL"))
+	if err != nil {
+		logrus.Warn("BROKER_URL: INVALID OR EMPTY. USE REDIS_URL.")
+		brokerURL = redisURL
+	}
+
 	serverBind := viper.GetString("RELAY_BIND")
 
 	return &RelayConfig{
 		actorKey:        privateKey,
 		domain:          domain,
 		redisClient:     redisClient,
+		brokerURL:       brokerURL,
 		redisURL:        redisURL,
 		serverBind:      serverBind,
 		serviceName:     viper.GetString("RELAY_SERVICENAME"),
@@ -120,19 +131,25 @@ func (relayConfig *RelayConfig) DumpWelcomeMessage(moduleName string, version st
  - Configuration
 RELAY NAME      : %s
 RELAY DOMAIN    : %s
+BROKER URL      : %s
 REDIS URL       : %s
 BIND ADDRESS    : %s
 JOB_CONCURRENCY : %s
-`, version, moduleName, relayConfig.serviceName, relayConfig.domain.Host, relayConfig.redisURL, relayConfig.serverBind, strconv.Itoa(relayConfig.jobConcurrency))
+`, version, moduleName, relayConfig.serviceName, relayConfig.domain.Host, relayConfig.brokerURL, relayConfig.redisURL, relayConfig.serverBind, strconv.Itoa(relayConfig.jobConcurrency))
 }
 
 // NewMachineryServer create Redis backed Machinery Server from RelayConfig.
 func NewMachineryServer(globalConfig *RelayConfig) (*machinery.Server, error) {
 	cnf := &config.Config{
-		Broker:          globalConfig.redisURL,
+		Broker:          globalConfig.brokerURL.String(),
 		DefaultQueue:    "relay",
-		ResultBackend:   globalConfig.redisURL,
+		ResultBackend:   globalConfig.redisURL.String(),
 		ResultsExpireIn: 1,
+		AMQP: &config.AMQPConfig{
+			Exchange:     "relay_exchange",
+			ExchangeType: "direct",
+			BindingKey:   "relay_task",
+		},
 	}
 	newServer, err := machinery.NewServer(cnf)
 
diff --git a/models/config_test.go b/models/config_test.go
index dbfa288..0986371 100644
--- a/models/config_test.go
+++ b/models/config_test.go
@@ -88,7 +88,7 @@ func TestRelayConfig_DumpWelcomeMessage(t *testing.T) {
 		"module NAME":  "Testing",
 		"RELAY NANE":   relayConfig.serviceName,
 		"RELAY DOMAIN": relayConfig.domain.Host,
-		"REDIS URL":    relayConfig.redisURL,
+		"REDIS URL":    relayConfig.redisURL.String(),
 		"BIND ADDRESS": relayConfig.serverBind,
 	}
 
diff --git a/readme.md b/readme.md
index 766d569..918ded3 100644
--- a/readme.md
+++ b/readme.md
@@ -46,6 +46,7 @@ relay --config /path/to/config.yml control
 
 ```yaml config.yml
 ACTOR_PEM: /var/lib/relay/actor.pem
+# BROKER_URL: amqp://guest:guest@rabbitmq:5672 # IF EMPTY, USE REDIS_URL
 REDIS_URL: redis://redis:6379
 
 RELAY_BIND: 0.0.0.0:8080
@@ -63,6 +64,7 @@ JOB_CONCURRENCY: 50
  This is **Optional** : When `config.yml` not exists, use environment variable.
 
  - ACTOR_PEM
+ - BROKER_URL
  - REDIS_URL
  - RELAY_BIND
  - RELAY_DOMAIN