layout | title | date | comments | categories |
---|---|---|---|---|
post |
java/MQ/install rabbitmq on debian and how to using it |
2017年06月23日 10:07:03 +0800 |
true |
- add sources.list
echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
- update & upgrade System
apt-get update apt-get upgrade
- install rabbitmq-server
apt-get install rabbitmq-server
- list default user list
rabbitmqctl list_users
2.list default vhosts
rabbitmqctl list_vhosts
- add a new user: liujun & set password & add to administrator group
rabbitmqctl add_user liujun ********** rabbitmqctl set_permissions -p / liujun ".*" ".*" ".*" rabbitmqctl set_user_tags liujun administrator rabbitmqctl list_users
enable plugin: amqp_client rabbitmq_jms_topic_exchange rabbitmq_management rabbitmq_stomp rabbitmq_web_mqtt rabbitmq_web_stomp sockjs
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.10 sbin/rabbitmq-plugins enable --offline --online amqp_client rabbitmq_jms_topic_exchange rabbitmq_management rabbitmq_stomp rabbitmq_web_mqtt rabbitmq_web_stomp sockjs /etc/init.d/rabbitmq-server restart netstat -ant | grep 672 tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN tcp6 0 0 :::5672 :::* LISTEN
echo []. > /etc/rabbitmq/rabbitmq.config
/etc/init.d/rabbitmq-server restart
- create a websocket message broker
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableStompBrokerRelay("/topic/"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/quakesep").withSockJS();//endpoint } }
- create a controller & template
@Controller public class DashboardController { @RequestMapping(value = {"", "/"}, method = RequestMethod.GET) public String index(){ return "dashboard/index"; } }
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title></title> <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}" href="../../static/css/bootstrap.min.css"/> <link rel="stylesheet" th:href="@{/css/bootstrap-theme.css}" href="../../static/css/bootstrap-theme.css"/> <link rel="stylesheet" th:href="@{/css/application.css}" href="../../static/css/application.css"/> </head> <body> <script th:src="@{/js/jquery-1.7.2.js}" src="../../js/jquery-1.7.2.js"></script> <script th:src="@{/js/moment.min.js}" src="../../js/moment.min.js"></script> </body> </html>
- create gateway xml & rabbit config
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-http="http://www.springframework.org/schema/integration/http" xmlns:int-amqp="http://www.springframework.org/schema/integration/amqp" xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration/amqp http://www.springframework.org/schema/integration/amqp/spring-integration-amqp.xsd http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd"> <import resource="rabbit-context.xml"/> <!--<int:inbound-channel-adapter channel="quakeinfotrigger" expression="''">--> <!--<int:poller fixed-delay="1000"/>--> <!--</int:inbound-channel-adapter>--> <!--<int:channel id="quakeinfo"/>--> <!--<int:channel id="quakeinfotrigger"/>--> <!--<int-http:outbound-gateway id="quakerHttpGateway"--> <!--request-channel="quakeinfotrigger"--> <!--url="http://localhost:8180/stomp/quake/json"--> <!--http-method="GET"--> <!--expected-response-type="java.lang.String"--> <!--charset="UTF-8"--> <!--reply-channel="quakeinfo">--> <!--</int-http:outbound-gateway>--> <!--<int-amqp:outbound-channel-adapter amqp-template="amqpTemplate" channel="quakeinfo"/>--> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"> <rabbit:connection-factory id="connectionFactory" username="liujun" host="localhost" password="*********" port="5672"/> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="amq.topic" routing-key="quakes.all" channel-transacted="true"/> <rabbit:admin connection-factory="connectionFactory"/> <rabbit:topic-exchange name="amq.topic"/> </beans>
- config application
@ComponentScan @EnableAutoConfiguration @ImportResource("classpath:httpgateway.xml") public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
because I using node js to send message into broker & i using amqplib, so:
npm i amqplib --save
var amqp = require('./node_modules/amqplib/callback_api'); amqp.connect('amqp://liujun:*************@localhost', function(err, conn) { conn.createChannel(function(err, ch) { if (err){ setTimeout(function() { conn.close(); process.exit(0) }, 500); } setInterval(function(){ pub(ch); }, 1000); }); function pub(ch){ var ex = 'amq.topic'; var key = 'quakes.all'; var msg = new Date().getTime().toString(); ch.assertExchange(ex, 'topic', {durable: true}); ch.publish(ex, key, new Buffer(msg)); report(key, msg); } function report(key, msg){ console.log(" [x] Sent %s:'%s'", key, msg); } });
inject stomp.js & sockjs into html template:
<script th:src="@{/js/sockjs-0.3.4.js}" src="../../js/sockjs-0.3.4.js"></script> <script th:src="@{/js/stomp.js}" src="../../js/stomp.js"></script>
/*<![CDATA[*/ $(document).ready(function() { connect(); }); var stompClient = null; function connect() { var socket = new SockJS('/quakesep');//连接endpoint stompClient = Stomp.over(socket); stompClient.connect({}, function(frame) { console.log('Connected: ' + frame); stompClient.subscribe('/topic/quakes.all', function(message){ showQuakeInfo(message.body); }); }); } function showQuakeInfo(quakeCollectionJson) { var quakeCollection = $.parseJSON(quakeCollectionJson); var name = quakeCollection.name console.log(name); } /*]]>*/