日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSM商城项目(八)

發布時間:2025/7/25 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSM商城项目(八) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1.? ?學習計劃

1、solr集群搭建

2、使用solrj管理solr集群

3、把搜索功能切換到集群版

4、添加商品同步到索引庫

2.?? 什么是SolrCloud

SolrCloud(solr 云)是Solr提供的分布式搜索方案,當你需要大規模,容錯,分布式索引和檢索能力時使用 SolrCloud。當一個系統的索引數據量少的時候是不需要使用SolrCloud的,當索引量很大,搜索請求并發很高,這時需要使用SolrCloud來滿足這些需求。

?SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作為集群的配置信息中心。

它有幾個特色功能:

1)集中式的配置信息

2)自動容錯

3)近實時搜索

4)查詢時自動負載均衡

3.?? Solr集群的系統架構

?

3.1. 物理結構

三個Solr實例( 每個實例包括兩個Core),組成一個SolrCloud。

3.2. 邏輯結構

索引集合包括兩個Shard(shard1和shard2),shard1和shard2分別由三個Core組成,其中一個Leader兩個Replication,Leader是由zookeeper選舉產生,zookeeper控制每個shard上三個Core的索引數據一致,解決高可用問題。

用戶發起索引請求分別從shard1和shard2上獲取,解決高并發問題。

?

3.2.1.??? collection

Collection在SolrCloud集群中是一個邏輯意義上的完整的索引結構。它常常被劃分為一個或多個Shard(分片),它們使用相同的配置信息。

比如:針對商品信息搜索可以創建一個collection。

?collection=shard1+shard2+....+shardX

?

3.2.2.??? Core

每個Core是Solr中一個獨立運行單位,提供 索引和搜索服務。一個shard需要由一個Core或多個Core組成。由于collection由多個shard組成所以collection一般由多個core組成。

3.2.3.??? Master或Slave

Master是master-slave結構中的主結點(通常說主服務器),Slave是master-slave結構中的從結點(通常說從服務器或備服務器)。同一個Shard下master和slave存儲的數據是一致的,這是為了達到高可用目的。

3.2.4.??? Shard

Collection的邏輯分片。每個Shard被化成一個或者多個replication,通過選舉確定哪個是Leader。

3.3. 需要實現的solr集群架構

Zookeeper作為集群的管理工具。

1、集群管理:容錯、負載均衡。

2、配置文件的集中管理

3、集群的入口

?

需要實現zookeeper 高可用。需要搭建集群。建議是奇數節點。需要三個zookeeper服務器。?

搭建solr集群需要7臺服務器。

搭建偽分布式:

需要三個zookeeper節點

需要四個tomcat節點。

建議虛擬機的內容1G以上。

4.?? 環境準備

??? CentOS-6.5-i386-bin-DVD1.iso

?????? jdk-7u72-linux-i586.tar.gz

??? apache-tomcat-7.0.47.tar.gz

??? zookeeper-3.4.6.tar.gz

??? solr-4.10.3.tgz

5.?? 安裝步驟

5.1. Zookeeper集群搭建

第一步:需要安裝jdk環境。

第二步:把zookeeper的壓縮包上傳到服務器。

第三步:解壓縮。

第四步:把zookeeper復制三份。

[root@localhost ~]# mkdir /usr/local/solr-cloud

[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper01

[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper02

[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper03

第五步:在每個zookeeper目錄下創建一個data目錄。

第六步:在data目錄下創建一個myid文件,文件名就叫做“myid”。內容就是每個實例的id。例如1、2、3

[root@localhost data]# touch? myid

[root@localhost data]# vim myid

[root@localhost data]# cat myid

1

第七步:修改配置文件。把conf目錄下的zoo_sample.cfg文件改名為zoo.cfg

?第八步:啟動每個zookeeper實例。

[root@localhost solr-cloud]# vim starall.sh
cd zookeeper01/bin
./zkServer.sh start
cd ../../
cd zookeeper02/bin
./zkServer.sh start
cd ../../
cd zookeeper03/bin
./zkServer.sh start
cd ../../

?[root@localhost solr-cloud]# chmod u+x starall.sh

[root@localhost solr-cloud]# ./starall.sh

?

查看zookeeper的狀態:

zookeeper01/bin/zkServer.sh status

zookeeper02/bin/zkServer.sh status

zookeeper03/bin/zkServer.sh status

如果還是單機模式啟動(Mode: standalone),關閉重啟下。

5.2. Solr集群的搭建

第一步:在?/usr/local/solr-cloud創建四個tomcat實例。每個tomcat運行在不同的端口。8180、8280、8380、8480

第二步:部署solr的war包。把單機版的solr工程復制到集群中的tomcat中。

[root@localhost solr-cloud]# cp -r ../solr/tomcat/webapps/solr/? tomcat01/webapps/

[root@localhost solr-cloud]# cp -r ../solr/tomcat/webapps/solr/? tomcat02/webapps/

[root@localhost solr-cloud]# cp -r ../solr/tomcat/webapps/solr/? tomcat03/webapps/

[root@localhost solr-cloud]# cp -r ../solr/tomcat/webapps/solr/? tomcat04/webapps/

第三步:為每個solr實例創建一個對應的solrhome。使用單機版的solrhome復制四份。

[root@localhost solr-cloud]# cp -r ../solr/solrhome/ solrhome01

[root@localhost solr-cloud]# cp -r ../solr/solrhome/ solrhome02

[root@localhost solr-cloud]# cp -r ../solr/solrhome/ solrhome03

[root@localhost solr-cloud]# cp -r ../solr/solrhome/ solrhome04

第四步:需要修改solr的web.xml文件。把solrhome關聯起來。

[root@localhost solr-cloud]# vim tomcat01/webapps/solr/WEB-INF/web.xml

[root@localhost solr-cloud]# vim tomcat02/webapps/solr/WEB-INF/web.xml

[root@localhost solr-cloud]# vim tomcat03/webapps/solr/WEB-INF/web.xml

[root@localhost solr-cloud]# vim tomcat04/webapps/solr/WEB-INF/web.xml

第五步:配置solrCloud相關的配置。每個solrhome下都有一個solr.xml,把其中的ip及端口號配置好。

第六步:讓zookeeper統一管理配置文件。需要把solrhome/collection1/conf目錄上傳到zookeeper。上傳任意solrhome中的配置文件即可。

使用工具上傳配置文件:/heima/solr-4.10.3/example/scripts/cloud-scripts

[root@localhost cloud-scripts]# ./zkcli.sh -zkhost 192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

[root@localhost cloud-scripts]# cd /usr/local/solr-cloud/zookeeper01/bin

[root@localhost bin]# ./zkCli.sh -server 192.168.25.128:2183

第七步:修改tomcat/bin目錄下的catalina.sh 文件,關聯solr和zookeeper。

把此配置添加到配置文件中:

[root@localhost solr-cloud]# vim tomcat01/bin/catalina.sh

JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"

[root@localhost solr-cloud]# vim tomcat02/bin/catalina.sh

JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"

[root@localhost solr-cloud]# vim tomcat03/bin/catalina.sh

JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"

[root@localhost solr-cloud]# vim tomcat04/bin/catalina.sh

JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"

第八步:啟動每個tomcat實例。要包裝zookeeper集群是啟動狀態。

[root@localhost solr-cloud]# vim start-tomcat-all.sh

/usr/local/solr-cloud/tomcat01/bin/startup.sh
/usr/local/solr-cloud/tomcat02/bin/startup.sh
/usr/local/solr-cloud/tomcat03/bin/startup.sh
/usr/local/solr-cloud/tomcat04/bin/startup.sh

[root@localhost solr-cloud]# chmod u+x start-tomcat-all.sh
[root@localhost solr-cloud]# ./start-tomcat-all.sh

第九步:訪問集群

第十步:創建新的Collection進行分片處理。

http://192.168.25.128:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

第十一步:刪除不用的Collection。

http://192.168.25.128:8180/solr/admin/collections?action=DELETE&name=collection1

?

6.?? 使用solrJ管理集群

6.1. 添加文檔

使用步驟:

第一步:把solrJ相關的jar包添加到工程中。

第二步:創建一個SolrServer對象,需要使用CloudSolrServer子類。構造方法的參數是zookeeper的地址列表。

第三步:需要設置DefaultCollection屬性。

第四步:創建一SolrInputDocument對象。

第五步:向文檔對象中添加域

第六步:把文檔對象寫入索引庫。

第七步:提交。

@Testpublic void testSolrCloudAddDocument() throws Exception {// 第一步:把solrJ相關的jar包添加到工程中。// 第二步:創建一個SolrServer對象,需要使用CloudSolrServer子類。構造方法的參數是zookeeper的地址列表。//參數是zookeeper的地址列表,使用逗號分隔CloudSolrServer solrServer = new CloudSolrServer("192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183");// 第三步:需要設置DefaultCollection屬性。solrServer.setDefaultCollection("collection2");// 第四步:創建一SolrInputDocument對象。SolrInputDocument document = new SolrInputDocument();// 第五步:向文檔對象中添加域document.addField("item_title", "測試商品");document.addField("item_price", "100");document.addField("id", "test001");// 第六步:把文檔對象寫入索引庫。 solrServer.add(document);// 第七步:提交。 solrServer.commit();}

6.2. 查詢文檔

@Testpublic void testQueryDocument() throws Exception {//創建一個CloudSolrServer對象CloudSolrServer cloudSolrServer = new CloudSolrServer("192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183");//設置默認的CollectioncloudSolrServer.setDefaultCollection("collection2");//創建一個查詢對象SolrQuery query = new SolrQuery();//設置查詢條件query.setQuery("*:*");//執行查詢QueryResponse queryResponse = cloudSolrServer.query(query);//取查詢結果SolrDocumentList solrDocumentList = queryResponse.getResults();System.out.println("總記錄數:" + solrDocumentList.getNumFound());//打印for (SolrDocument solrDocument : solrDocumentList) {System.out.println(solrDocument.get("id"));System.out.println(solrDocument.get("title"));System.out.println(solrDocument.get("item_title"));System.out.println(solrDocument.get("item_price"));}}

7.?? 把搜索功能切換到集群版

<!-- 單機版solr服務配置 --> <!-- <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer"><constructor-arg index="0" value="http://192.168.25.128:8090/solr/collection1"/></bean> --><!-- 集群版solr服務 --><bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer"><constructor-arg name="zkHost" value="192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"></constructor-arg> <property name="defaultCollection" value="collection2"></property></bean>

啟動注冊中心

[root@localhost //]# cd heima/zookeeper-3.4.6/bin

[root@localhost bin]# ./zkServer.sh start

啟動redis集群

[root@localhost //]# cd? usr/local/redis-cluster

[root@localhost redis-cluster]# ./start-all.sh?

8.?? 全局異常處理

8.1. 處理思路

8.2. 創建全局異常處理器

package cn.e3mall.search.exception;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView;public class GlobalExceptionReslover implements HandlerExceptionResolver{Logger logger = LoggerFactory.getLogger(GlobalExceptionReslover.class);@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) {//寫日志文件logger.error("系統發生異常", ex);//發郵件、發短信//Jmail:可以查找相關的資料//需要在購買短信。調用第三方接口即可。//展示錯誤頁面ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("error/exception");return modelAndView;} }

8.3. 上傳日志文件

log4j.rootLogger=DEBUG,A3,STDOUTlog4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%nlog4j.appender.A3=org.apache.log4j.RollingFileAppender log4j.appender.A3.file=logs/server.log log4j.appender.A3.MaxFileSize=1024KB log4j.appender.A3.MaxBackupIndex=10 log4j.appender.A3.layout=org.apache.log4j.PatternLayout log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n

8.4. Springmvc中配置異常處理器

<!-- 全局異常處理器 -->
<bean class="cn.e3mall.search.exception.GlobalExceptionReslover"/>

9.?? 同步索引庫分析

方案一:在taotao-manager中,添加商品的業務邏輯中,添加一個同步索引庫的業務邏輯。

缺點:業務邏輯耦合度高,業務拆分不明確

方案二:業務邏輯在taotao-search中實現,調用服務在taotao-manager實現。業務邏輯分開。

缺點:服務之間的耦合度變高。服務的啟動有先后順序。

方案三:使用消息隊列。MQ是一個消息中間件。

MQ是一個消息中間件,ActiveMQRabbitMQkafka

10.?? ActiveMQ

10.1. 什么是ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現,盡管JMS規范出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。

主要特點:

1. 多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

2. 完全支持JMS1.1和J2EE 1.4規范 (持久化,XA消息,事務)

3. 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統里面去,而且也支持Spring2.0的特性

4. 通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上

5. 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

6. 支持通過JDBC和journal提供高速的消息持久化

7. 從設計上保證了高性能的集群,客戶端-服務器,點對點

8. 支持Ajax

9. 支持與Axis的整合

10. 可以很容易得調用內嵌JMS provider,進行測試

10.2. ActiveMQ的消息形式

對于消息的傳遞有兩種類型:

一種是點對點的,即一個生產者和一個消費者一一對應;

另一種是發布/訂閱模式,即一個生產者產生消息并進行發送后,可以由多個消費者進行接收。

JMS定義了五種不同的消息正文格式,以及調用的消息類型,允許你發送并接收以一些不同形式的數據,提供現有消息格式的一些級別的兼容性。

  · StreamMessage -- Java原始值的數據流

  · MapMessage--一套名稱-值對

  · TextMessage--一個字符串對象

  · ObjectMessage--一個序列化的 Java對象

  · BytesMessage--一個字節的數據流

11.?? ActiveMQ的安裝

進入http://activemq.apache.org/下載ActiveMQ

?

?

?

11.1. 安裝環境:

1、需要jdk

2、安裝Linux系統。生產環境都是Linux系統。

11.2. 安裝步驟

第一步: 把ActiveMQ 的壓縮包上傳到Linux系統。

第二步:解壓縮。

第三步:啟動。

使用bin目錄下的activemq命令啟動:

[root@localhost bin]# ./activemq start

關閉:

[root@localhost bin]# ./activemq stop

查看狀態:

[root@localhost bin]# ./activemq status

?

注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。建議使用5.11.2

進入管理后臺:

http://192.168.25.168:8161/admin

用戶名:admin

密碼:admin

12.?? ActiveMQ的使用方法

12.1. Queue

12.1.1.??? Producer

生產者:生產消息,發送端。

把jar包添加到工程e3-manager-service的pom.xml中。使用5.11.2版本的jar包。

<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId></dependency>

第一步:創建ConnectionFactory對象,需要指定服務端ip及端口號。

第二步:使用ConnectionFactory對象創建一個Connection對象。

第三步:開啟連接,調用Connection對象的start方法。

第四步:使用Connection對象創建一個Session對象。

第五步:使用Session對象創建一個Destination對象(topic、queue),此處創建一個Queue對象。

第六步:使用Session對象創建一個Producer對象。

第七步:創建一個Message對象,創建一個TextMessage對象。

第八步:使用Producer對象發送消息。

第九步:關閉資源。

package cn.e3mall.activemq;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory; import org.junit.Test;public class ActiveMqTest {@Testpublic void testQueueProducer() throws Exception {// 第一步:創建ConnectionFactory對象,需要指定服務端ip及端口號。//brokerURL服務器的ip及端口號ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");// 第二步:使用ConnectionFactory對象創建一個Connection對象。Connection connection = connectionFactory.createConnection();// 第三步:開啟連接,調用Connection對象的start方法。 connection.start();// 第四步:使用Connection對象創建一個Session對象。//第一個參數:是否開啟事務。true:開啟事務,第二個參數忽略。//第二個參數:當第一個參數為false時,才有意義。消息的應答模式。1、自動應答2、手動應答。一般是自動應答。Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 第五步:使用Session對象創建一個Destination對象(topic、queue),此處創建一個Queue對象。//參數:隊列的名稱。Queue queue = session.createQueue("test-queue");// 第六步:使用Session對象創建一個Producer對象。MessageProducer producer = session.createProducer(queue);// 第七步:創建一個Message對象,創建一個TextMessage對象。/*TextMessage message = new ActiveMQTextMessage();message.setText("hello activeMq,this is my first test.");*/TextMessage textMessage = session.createTextMessage("hello activeMq,this is my first test.");// 第八步:使用Producer對象發送消息。 producer.send(textMessage);// 第九步:關閉資源。 producer.close();session.close();connection.close();}}

12.1.2.??? Consumer

消費者:接收消息。

第一步:創建一個ConnectionFactory對象。

第二步:從ConnectionFactory對象中獲得一個Connection對象。

第三步:開啟連接。調用Connection對象的start方法。

第四步:使用Connection對象創建一個Session對象。

第五步:使用Session對象創建一個Destination對象。和發送端保持一致queue,并且隊列的名稱一致。

第六步:使用Session對象創建一個Consumer對象。

第七步:接收消息。

第八步:打印消息。

第九步:關閉資源

@Testpublic void testQueueConsumer() throws Exception {// 第一步:創建一個ConnectionFactory對象。ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");// 第二步:從ConnectionFactory對象中獲得一個Connection對象。Connection connection = connectionFactory.createConnection();// 第三步:開啟連接。調用Connection對象的start方法。 connection.start();// 第四步:使用Connection對象創建一個Session對象。Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 第五步:使用Session對象創建一個Destination對象。和發送端保持一致queue,并且隊列的名稱一致。Queue queue = session.createQueue("test-queue");// 第六步:使用Session對象創建一個Consumer對象。MessageConsumer consumer = session.createConsumer(queue);// 第七步:接收消息。consumer.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {try {TextMessage textMessage = (TextMessage) message;String text = null;//取消息的內容text = textMessage.getText();// 第八步:打印消息。 System.out.println(text);} catch (JMSException e) {e.printStackTrace();}}});//等待鍵盤輸入 System.in.read();// 第九步:關閉資源 consumer.close();session.close();connection.close();}

12.2. Topic

12.2.1.??? Producer

使用步驟:

第一步:創建ConnectionFactory對象,需要指定服務端ip及端口號。

第二步:使用ConnectionFactory對象創建一個Connection對象。

第三步:開啟連接,調用Connection對象的start方法。

第四步:使用Connection對象創建一個Session對象。

第五步:使用Session對象創建一個Destination對象(topic、queue),此處創建一個Topic對象。

第六步:使用Session對象創建一個Producer對象。

第七步:創建一個Message對象,創建一個TextMessage對象。

第八步:使用Producer對象發送消息。

第九步:關閉資源。

@Testpublic void testTopicProducer() throws Exception {// 第一步:創建ConnectionFactory對象,需要指定服務端ip及端口號。// brokerURL服務器的ip及端口號ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");// 第二步:使用ConnectionFactory對象創建一個Connection對象。Connection connection = connectionFactory.createConnection();// 第三步:開啟連接,調用Connection對象的start方法。 connection.start();// 第四步:使用Connection對象創建一個Session對象。// 第一個參數:是否開啟事務。true:開啟事務,第二個參數忽略。// 第二個參數:當第一個參數為false時,才有意義。消息的應答模式。1、自動應答2、手動應答。一般是自動應答。Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 第五步:使用Session對象創建一個Destination對象(topic、queue),此處創建一個topic對象。// 參數:話題的名稱。Topic topic = session.createTopic("test-topic");// 第六步:使用Session對象創建一個Producer對象。MessageProducer producer = session.createProducer(topic);// 第七步:創建一個Message對象,創建一個TextMessage對象。/** TextMessage message = new ActiveMQTextMessage(); message.setText(* "hello activeMq,this is my first test.");*/TextMessage textMessage = session.createTextMessage("hello activeMq,this is my topic test");// 第八步:使用Producer對象發送消息。 producer.send(textMessage);// 第九步:關閉資源。 producer.close();session.close();connection.close();}

12.2.2.??? Consumer

消費者:接收消息。

第一步:創建一個ConnectionFactory對象。

第二步:從ConnectionFactory對象中獲得一個Connection對象。

第三步:開啟連接。調用Connection對象的start方法。

第四步:使用Connection對象創建一個Session對象。

第五步:使用Session對象創建一個Destination對象。和發送端保持一致topic,并且話題的名稱一致。

第六步:使用Session對象創建一個Consumer對象。

第七步:接收消息。

第八步:打印消息。

第九步:關閉資源

@Testpublic void testTopicConsumer() throws Exception {// 第一步:創建一個ConnectionFactory對象。ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");// 第二步:從ConnectionFactory對象中獲得一個Connection對象。Connection connection = connectionFactory.createConnection();// 第三步:開啟連接。調用Connection對象的start方法。 connection.start();// 第四步:使用Connection對象創建一個Session對象。Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 第五步:使用Session對象創建一個Destination對象。和發送端保持一致topic,并且話題的名稱一致。Topic topic = session.createTopic("test-topic");// 第六步:使用Session對象創建一個Consumer對象。MessageConsumer consumer = session.createConsumer(topic);// 第七步:接收消息。consumer.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {try {TextMessage textMessage = (TextMessage) message;String text = null;// 取消息的內容text = textMessage.getText();// 第八步:打印消息。 System.out.println(text);} catch (JMSException e) {e.printStackTrace();}}});System.out.println("topic的消費端03。。。。。");// 等待鍵盤輸入 System.in.read();// 第九步:關閉資源 consumer.close();session.close();connection.close();}

?

總結

問題:linux下ActiveMQ閃退,java.net.UnknownHostException:root

解決:vim /etc/hosts

配置Ip和主機名

?

?

?

轉載于:https://www.cnblogs.com/huozhonghun/p/10071156.html

總結

以上是生活随笔為你收集整理的SSM商城项目(八)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。