ActiveMQ
Apache ActiveMQ是Apache出品纸兔,最流行的猪贪,能力強(qiáng)勁的開源消息總線。速度快麻车,支持許多跨語言客戶端和協(xié)議,具有易于使用的企業(yè)集成模式和許多高級(jí)功能斗这,同時(shí)完全支持JMS 1.1和J2EE 1.4
Github地址:https://github.com/apache/activemq
官方網(wǎng)站:http://activemq.apache.org/
API文檔:http://activemq.apache.org/maven/apidocs/index.html
特點(diǎn):
1.支持Java动猬,C,C ++表箭,C#赁咙,Ruby,Perl免钻,Python彼水,PHP等
2.完全支持JMS客戶端和Message Broker中的企業(yè)集成模式
3.Spring支持以便ActiveMQ可以輕松嵌入到Spring應(yīng)用程序中,并使用Spring的XML配置機(jī)制進(jìn)行配置
4.支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
5.支持通過JDBC和journal提供高速的消息持久化
6.從設(shè)計(jì)上保證了高性能的集群,客戶端-服務(wù)器,點(diǎn)對(duì)點(diǎn)
7.支持Ajax
8.支持與Axis的整合
JMS簡(jiǎn)介:
JMS即Java消息服務(wù)Java Message Service
應(yīng)用程序接口是一個(gè)Java平臺(tái)中關(guān)于面向消息中間件MOM
的API极舔,用于在兩個(gè)應(yīng)用程序之間凤覆,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信拆魏。Java消息服務(wù)是一個(gè)與具體平臺(tái)無關(guān)的API盯桦,絕大多數(shù)MOM提供商都對(duì)JMS提供支持。
JMS和MQ的關(guān)系:
JMS是一個(gè)用于提供消息服務(wù)的技術(shù)規(guī)范渤刃,它制定了在整個(gè)消息服務(wù)提供過程中的所有數(shù)據(jù)結(jié)構(gòu)和交互流程拥峦。而MQ則是消息隊(duì)列服務(wù),是面向消息中間件(MOM)的最終實(shí)現(xiàn)卖子,是真正的服務(wù)提供者略号;MQ的實(shí)現(xiàn)可以基于JMS,也可以基于其他規(guī)范或標(biāo)準(zhǔn)。
支持JMS的開源MQ:目前選擇的最多的是ActiveMQ
ActiveMQ下載
下載地址:http://activemq.apache.org/download.html
推薦選擇ActiveMQ 5
Window系統(tǒng)下選擇zip
下載完后解壓玄柠,進(jìn)入bin目錄
在bin目錄下32和64分別對(duì)應(yīng)32位和64位操作系統(tǒng)
可以直接使用activemq.bat
啟動(dòng)服務(wù),但是關(guān)閉該窗口氛琢,服務(wù)停止。所以最好把Activemq
注冊(cè)為Windows
服務(wù)
以管理員身份運(yùn)行 InstallService.bat
注冊(cè)服務(wù)
Windows中刪除服務(wù)需要管理員使用sc delete ActiveMQ
WIN+X
進(jìn)入計(jì)算機(jī)管理→服務(wù)和應(yīng)用程序→服務(wù)
沒啟動(dòng)就啟動(dòng)下
測(cè)試ActiveMQ是否安裝成功
訪問http://localhost:8161/
ActiveMQ
管理控制臺(tái)默認(rèn)端口是8161
随闪,默認(rèn)對(duì)外服務(wù)端口為61616
管理控制臺(tái)端口可以在conf/jetty.xml
中修改
對(duì)外服務(wù)端口可以在conf/activemq.xml
中修改
登錄管理ActiveMQ
ActiveMQ默認(rèn)admin
的用戶名密碼都是admin
,可以在conf/jetty-realm.properties
中找到
修改的話也可以對(duì)應(yīng)修改
成功登錄的界面如下
進(jìn)行ActiveMQ與SpringBoot的集成
引入activemq
依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
消息生產(chǎn)者
@RestController
public class Producer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@RequestMapping("/sendMsg")
public void sendMsg(String msg) {
msg="你好,我是發(fā)送msg的";
jmsMessagingTemplate.convertAndSend("my_msg", msg);
System.out.println("msg發(fā)送成功");
}
}
注:
從 Spring Framework 4.1
開始骚勘,JmsMessagingTemplate
構(gòu)建在JmsTemplate
之上铐伴,
并提供與消息抽象層org.springframework.messaging.Message
的集成。 允許以通用的方式來創(chuàng)建要發(fā)送的消息俏讹。
convertAndSend()
是其中一種發(fā)送消息的方法当宴,對(duì)象實(shí)體自動(dòng)轉(zhuǎn)換為Message對(duì)象
具體使用參考:https://docs.spring.io/spring/docs/5.1.3.RELEASE/javadoc-api/
public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
implements JmsMessageOperations, InitializingBean {
@Nullable
private JmsTemplate jmsTemplate;
public void convertAndSend(String destinationName, Object payload) throws MessagingException {
this.convertAndSend(destinationName, payload, (Map)null);
}
......
}
消息消費(fèi)者
@Component
public class Consumer {
@JmsListener(destination = "my_msg")
public void readMsg(String text) {
System.out.println("接收到消息:" + text);
}
}
采用的是監(jiān)聽者的方式來監(jiān)聽指定地點(diǎn)的消息,采用注解@JmsListener
來設(shè)置監(jiān)聽方法泽疆。
@JmsListene
源碼
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(JmsListeners.class)
@MessageMapping
public @interface JmsListener {
String id() default "";
String containerFactory() default "";
String destination();
String subscription() default "";
String selector() default "";
String concurrency() default "";
}
subscription
: 持久化訂閱者名稱户矢, 設(shè)置這個(gè)屬性,服務(wù)器每次重啟后殉疼,都不會(huì)生成新的梯浪,一直只有這一個(gè)
destination
: 監(jiān)聽的 topic 的值或者隊(duì)列名
yml配置文件
spring:
activemq:
broker-url: tcp://localhost:61616
配置ActiveMQ對(duì)外服務(wù)端口
啟動(dòng)測(cè)試,訪問http://localhost:8080/sendMsg
消息發(fā)送接收都成功了
在可視化控制臺(tái)上面也看到