最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java遠(yuǎn)程連接調(diào)用Rabbitmq的實(shí)例代碼

 更新時(shí)間:2017年07月17日 10:47:00   作者:甄齊才  
本篇文章主要介紹了java遠(yuǎn)程連接調(diào)用Rabbitmq的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本文介紹了java遠(yuǎn)程連接調(diào)用Rabbitmq,分享給大家,希望此文章對(duì)各位有所幫助。

打開(kāi)IDEA創(chuàng)建一個(gè)maven工程(Java就可以了)。

這里寫(xiě)圖片描述 

pom.xml文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.zhenqi</groupId>
 <artifactId>rabbitmq-study</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>rabbitmq-study</name>
 <url>http://maven.apache.org</url>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

 <dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
   <scope>test</scope>
  </dependency>

  <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
  <dependency>
   <groupId>com.rabbitmq</groupId>
   <artifactId>amqp-client</artifactId>
   <version>4.1.0</version>
   <exclusions>
    <exclusion>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
    </exclusion>
   </exclusions>
  </dependency>

  <dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.7.21</version>
  </dependency>

  <dependency>
   <groupId>commons-lang</groupId>
   <artifactId>commons-lang</artifactId>
   <version>2.6</version>
  </dependency>

 </dependencies>
</project>

為了能遠(yuǎn)程訪問(wèn)rabbitmq,則需要編輯 /etc/rabbitmq/rabbitmq.conf,添加以下內(nèi)容。

[
  {rabbit, [{tcp_listeners, [5672]}, {loopback_users, ["asdf"]}]}
 ]

添加administrator角色

rabbitmqctl set_user_tags openstack administrator

創(chuàng)建抽象隊(duì)列 EndPoint.java

package com.zhenqi;

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


/**
 * Created by wuming on 2017/7/16.
 */
public abstract class EndPoint {

  protected Channel channel;
  protected Connection connection;
  protected String endPointName;

  public EndPoint(String endpointName) throws Exception {

    this.endPointName = endpointName;

    //創(chuàng)建一個(gè)連接工廠 connection factory
    ConnectionFactory factory = new ConnectionFactory();

    //設(shè)置rabbitmq-server服務(wù)IP地址
    factory.setHost("192.168.146.128");
    factory.setUsername("openstack");
    factory.setPassword("rabbitmq");
    factory.setPort(5672);
    factory.setVirtualHost("/");

    //得到 連接
    connection = factory.newConnection();

    //創(chuàng)建 channel實(shí)例
    channel = connection.createChannel();

    channel.queueDeclare(endpointName, false, false, false, null);
  }

  /**
   * 關(guān)閉channel和connection。并非必須,因?yàn)殡[含是自動(dòng)調(diào)用的。
   * @throws IOException
   */
  public void close() throws Exception{
    this.channel.close();
    this.connection.close();
  }
}

生產(chǎn)者Producer.java

生產(chǎn)者類的任務(wù)是向隊(duì)列里寫(xiě)一條消息

package com.zhenqi;

import org.apache.commons.lang.SerializationUtils;

import java.io.Serializable;

/**
 * Created by wuming on 2017/7/16.
 */
public class Producer extends EndPoint {

  public Producer(String endpointName) throws Exception {
    super(endpointName);
  }

  public void sendMessage(Serializable object) throws Exception {
    channel.basicPublish("",endPointName, null, SerializationUtils.serialize(object));
  }
}

消費(fèi)者QueueConsumer.java

消費(fèi)者可以以線程方式運(yùn)行,對(duì)于不同的事件有不同的回調(diào)函數(shù),其中最主要的是處理新消息到來(lái)的事件。

package com.zhenqi;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;
import org.apache.commons.lang.SerializationUtils;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by wuming on 2017/7/16.
 */
public class QueueConsumer extends EndPoint implements Runnable, Consumer {

  private Logger LOG=Logger.getLogger(QueueConsumer.class);

  public QueueConsumer(String endpointName) throws Exception {
    super(endpointName);
  }

  public void handleConsumeOk(String s) {

  }

  public void handleCancelOk(String s) {

  }

  public void handleCancel(String s) throws IOException {

  }

  public void handleShutdownSignal(String s, ShutdownSignalException e) {

  }

  public void handleRecoverOk(String s) {
    LOG.info("Consumer "+s +" registered");
  }

  public void handleDelivery(String s, Envelope envelope, AMQP.BasicProperties basicProperties, byte[] bytes) throws IOException {
    Map map = (HashMap) SerializationUtils.deserialize(bytes);
    LOG.info("Message Number "+ map.get("message number") + " received.");
  }

  public void run() {
    try{
      channel.basicConsume(endPointName, true,this);
    }catch(IOException e){
      e.printStackTrace();
    }
  }
}

 測(cè)試

運(yùn)行一個(gè)消費(fèi)者線程,然后開(kāi)始產(chǎn)生大量的消息,這些消息會(huì)被消費(fèi)者取走

package com.zhenqi;

import java.util.HashMap;

/**
 * Created by wuming on 2017/7/16.
 */
public class TestRabbitmq {

  public static void main(String[] args){
    try{
      QueueConsumer consumer = new QueueConsumer("queue");
      Thread consumerThread = new Thread(consumer);
      consumerThread.start();

      Producer producer = new Producer("queue");

      for (int i = 0; i < 100000; i++){
        HashMap message = new HashMap();
        message.put("message number", i);
        producer.sendMessage(message);
        System.out.println("Message Number "+ i +" sent.");
      }
    }catch(Exception e){
      e.printStackTrace();
    }

  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • Springboot如何通過(guò)自定義工具類獲取bean

    Springboot如何通過(guò)自定義工具類獲取bean

    這篇文章主要介紹了Springboot通過(guò)自定義工具類獲取bean方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot項(xiàng)目打包war包時(shí)無(wú)法運(yùn)行問(wèn)題的解決方式

    SpringBoot項(xiàng)目打包war包時(shí)無(wú)法運(yùn)行問(wèn)題的解決方式

    在開(kāi)發(fā)工程中,使用啟動(dòng)類啟動(dòng)能夠正常啟動(dòng)并測(cè)試,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目打包war包時(shí)無(wú)法運(yùn)行問(wèn)題的解決方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • JMM核心概念之Happens-before原則

    JMM核心概念之Happens-before原則

    關(guān)于Java并發(fā)的通信機(jī)制是基于共享內(nèi)存實(shí)現(xiàn)的,線程之間共享程序的公共狀態(tài),通過(guò)寫(xiě)-讀內(nèi)存中的公共狀態(tài)進(jìn)行隱式通信,這對(duì)程序員是透明的,我們需要理解其工作機(jī)制,以防止內(nèi)存可見(jiàn)性問(wèn)題,從而編寫(xiě)出正確同步的代碼
    2021-06-06
  • 淺談Spring Bean的作用域之間有什么區(qū)別

    淺談Spring Bean的作用域之間有什么區(qū)別

    Spring的bean有5種作用域是singleton、prototype、request、session和globalSession,本文主要介紹了淺談Spring Bean的作用域之間有什么區(qū)別,感興趣的可以了解一下
    2024-05-05
  • SpringBoot+WebSocket+Netty實(shí)現(xiàn)消息推送的示例代碼

    SpringBoot+WebSocket+Netty實(shí)現(xiàn)消息推送的示例代碼

    這篇文章主要介紹了SpringBoot+WebSocket+Netty實(shí)現(xiàn)消息推送的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • SpringBoot中使用攔截器的配置詳解

    SpringBoot中使用攔截器的配置詳解

    這篇文章主要介紹了SpringBoot中使用攔截器的配置詳解,攔截器是?AOP?的一種實(shí)現(xiàn),專門(mén)攔截對(duì)動(dòng)態(tài)資源的后臺(tái)請(qǐng)求,即攔截對(duì)控制層的請(qǐng)?求,使用場(chǎng)景比較多的是判斷用戶是否有權(quán)限請(qǐng)求后臺(tái),需要的朋友可以參考下
    2024-01-01
  • Spring Boot常見(jiàn)外部配置文件方式詳析

    Spring Boot常見(jiàn)外部配置文件方式詳析

    這篇文章主要給大家介紹了關(guān)于Spring Boot常見(jiàn)外部配置文件方式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 淺談mybatis mapper.xml文件中$和#的區(qū)別

    淺談mybatis mapper.xml文件中$和#的區(qū)別

    這篇文章主要介紹了淺談mybatis mapper.xml文件中$和#的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Java實(shí)現(xiàn)Word/Excel/TXT轉(zhuǎn)PDF的方法

    Java實(shí)現(xiàn)Word/Excel/TXT轉(zhuǎn)PDF的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)Word/Excel/TXT轉(zhuǎn)PDF的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

通山县| 绍兴市| 于都县| 华坪县| 锦屏县| 桐乡市| 海晏县| 临潭县| 绥德县| 大姚县| 南开区| 永兴县| 青神县| 浠水县| 翼城县| 兴安盟| 平安县| 离岛区| 江津市| 吉隆县| 资源县| 肃北| 育儿| 寻乌县| 中阳县| 上犹县| 玛纳斯县| 白朗县| 巴林右旗| 四川省| 姚安县| 津南区| 瓦房店市| 金湖县| 林口县| 安溪县| 抚顺市| 富平县| 信丰县| 固安县| 庆安县|