๋ฑ๋ก/์์ /์ญ์ ๋ฑ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์
MQTT๋ฅผ ์ด์ฉํ์ฌ ๋ฐํ(publish)๊ณผ ๊ตฌ๋
(subscribe)์ ํตํด ์ค์๊ฐ์ผ๋ก ์ ๋ณด ์์
์ ํ๋ก์ ํธ network_exam ์์ฑ ํ
๋ฌผํ๊ด๋ฆฌ ์๋ฒ๊ตฌํ ํ์ผ ๋ณต์ฌํ์ฌ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ณ ์ถ๊ฐ๋ก itemview
์ broker
๋ง ์์ฑ
MQTT๋ ๋ฐํ(publish)๊ณผ ๊ตฌ๋ (subscribe)์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค
publish
๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ,subscribe
๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๊ฒ์ด๋ค
- ๊ตฌ๋ (subscribe)์ ํตํ ์ค์๊ฐ ์ ๋ณด๋ณํ ๊ฐ์ง ์์
MqttCallback
์ ์ฌ์ฉ์๊ฐ ์ ๋ฌํ๋ ์ ๋ณด๋ฅผ ์ค์๊ฐ ๊ฐ์งํ๋ค
ItemView
์์ItemMqttClient
๋ฅผ ๊ตฌ๋subscribe
ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ณํ๊ฐ ์ค์๊ฐ์ผ๋ก ๊ฐ์ง ๊ฐ๋ฅํ๋ค
ItemMqttClient
์messageArrived
์ ๋ฉ์ธ์ง ์์ ์ ์๋์ผ๋ก ์คํ๋๋ฉฐ ๋ถ๋ชจ์ธMqttCallback
์ ์์implements
๋ฐ์ ๋ฉ์๋์ด๋ค- MQTT์์ ๋ฐ์ดํฐ ๋ฐ์ก(publish)
ItemMqttClient
์sendMessage
๋ ์ค์๊ฐ ๊ฐ์ง์ ๋ณ๊ฐ๋ก ์งํ๋๋ค
ItemMqttClient
์์sendMessage
๋ MQTT์์ ๋ฐ์ดํฐ ๋ฐ์กpublish
์ ์คํ๋๋ค
โก๏ธ ex)ItemMqttClient
์์ TERMNAL์ ๋ฉ์ธ์ง ๋ฐ์ก
app.java
์์ItemView.java
์คํํ๋คItemView.java
๊ฐItemMqttClient.java
์คํํ๋ค
์ด๋ItemView
๋ ์์ ์ ๊ฐ์ฒดthis
๋ฅผItemMqttClient
์๊ฒ ์ ๋ฌํด ์ค๋ค
โ๏ธItemMqttClient
์์ ๋์ค์printitem()
์ ํธ์ถ ํ ์ ์๊ฒ ํ๊ธฐ ์ํด ์ฃผ๋ ๊ฒ!- ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ
MqttCallback
์ด ๊ฐ์งํ์ฌmessageArrived
๋ฅผ ์คํํ๋ค
messageArrived
๋ItemView
์์ ์ถ๋ ฅํ๊ธฐ ์ํดprintitem()
์ ํธ์ถ ํด์ผํ๋ค
โก๏ธprintitem()
์ ํธ์ถ์ ์ํด ์์ฑ์์ ItemView์ ๊ฐ์ฒด์ธitemObject = obj;
๋ฅผ ์์ฑํ๋คmessageArrived
๋printItem()
์ ์ด์ฉํดItemView.java
๋กtopic
๊ณผmsg
๋ฅผ ๋ณด๋ธ๋ค
โก๏ธitemObject.printItem( topic, msg );
ItemView.java
์printItem
๋ฉ์๋๋topic
๊ณผmsg
๋ฅผ ์ถ๋ ฅํ๋ค
์ถ๋ ฅ์
ItemView
์์ ์คํ
โก๏ธ app.java ์คํ์ItemView
๊ฐ ์คํ ๋จ
import com.example.view.ItemView;
public class App
{
public static void main( String[] args )
{
new ItemView();
}
}
- MqttCallback ๋ฅผ ์์ ๋ฐ์ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ์ฌ์ฉํ๋ค =
implements MqttCallback
โก๏ธimplements
: ๋ถ๋ชจ๋ ์ ์ธ๋ง ํ๋ฉฐ, ๋ฐ๋์ ์์์ด ๋ถ๋ชจ์ ์ ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ฌ์ฉํ๋ค
๐ ์ฐธ๊ณ extends, implements์ ์ฐจ์ด- ํ๊ธ ์ถ๋ ฅ ์ค์ ์
"UTF-8"
์ฌ์ฉ
String msg = new String( message.getPayload(), "EUC-KR" );
๐ฅ ์ถ๋ ฅ์ ํ๊ธ์ด ๊นจ์ ธ์ ์ถ๋ ฅ๋๋ค
String msg = new String( message.getPayload(), "UTF-8" );
๐ฆ ํ๊ธ์ด ๊นจ์ง์์ด ์ถ๋ ฅ๋จ
// ์น์๋ฒ ๋ธ๋ก์ปค ์ค์ ์ => ws://127.0.0.1:1884, tcp://127.0.0.1.1883
private String broker = "tcp://1.234.5.158:11883";
private String clientId = "db207_" + System.currentTimeMillis();
private String userid = "ds606";
private String password = "ds606";
// ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ๋ณด๊ดํ๋ ๋ฐฉ๋ฒ
private MemoryPersistence persistence = new MemoryPersistence();
private MqttAsyncClient client = null;
// ItemView ํธ์ถ ๊ฐ๋ฅํ itemobject
private ItemView itemObject;
// ์์ฑ์ ์์ฑ
public ItemMqttClient(ItemView obj) {
itemObject = obj;
try {
client = new MqttAsyncClient(broker, clientId, persistence);
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName(userid);
options.setPassword(password.toCharArray());
options.setCleanSession(true);
client.connect(options);
client.setCallback(this); // 1. ๊ฐ์ฒด๋ฅผ ์ ๋ฌํจ.
System.out.println(this.client);// ์ ์๊ฐ์ฒด
Thread.sleep(1000);
System.out.println("์ ์์ฑ๊ณต");
} catch (Exception e) {
System.out.println("์ ์์คํจ");
e.printStackTrace();
}
}
// ๊ตฌ๋
ํ๊ธฐ
public void subscribe() {
try {
client.subscribe("/ds207/#", 0);
System.out.println("๊ตฌ๋
์ค์ ์ฑ๊ณต");
} catch (MqttException e) {
e.printStackTrace();
System.out.println("๊ตฌ๋
์ค์ ์คํจ");
}
}
// ๊ตฌ๋
ํด์
public void unSubscribe() {
try {
client.unsubscribe("/ds207/#");
System.out.println("๊ตฌ๋
ํด์ ์ฑ๊ณต");
}
catch(Exception e){
e.printStackTrace();
System.out.println("๊ตฌ๋
ํด์ ์คํจ");
}
}
// ๋ฉ์์ง๋ณด๋ด๊ธฐ
public void sendMessage(String msg) {
try {
MqttMessage message = new MqttMessage();
message.setQos(0);
message.setPayload( msg.getBytes() );
if(client != null) {
client.publish("/ds207/test207", message);
}
}
catch(Exception e){
e.printStackTrace();
System.out.println("๋ฉ์์ง ๋ณด๋ด๊ธฐ ์คํจ");
}
}
messageArrived
์ค๋ฒ๋ผ์ด๋ ์์ฑ์ MqttMessage โ String์ผ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋คgetPayload()
๋ byte
ํํ์ []๋ฐฐ์ด
๋ก ์ค๊ธฐ ๋๋ฌธ์ String
์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค@Override
public void connectionLost(Throwable arg0) {
// ์๋ฒ ์ฐ๊ฒฐ์ด ๋๊ฒผ์๋
System.out.println("์๋ฒ ์ฐ๊ฒฐ ๋๊ฒผ์ ๋");
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// ๋ฉ์ธ์ง๊ฐ ๋์ฐฉํ์๋
System.out.println("๋ฉ์ธ์ง๊ฐ ์์ ๋");
// MqttMessage => String์ผ๋ก ๋ณ๊ฒฝ
String msg = new String( message.getPayload(), "UTF-8" ); //ํ๊ธ์ด ๊นจ์ง์์ด ์ถ๋ ฅ๋จ
// System.out.println(topic + ", " + msg); => itemview์์ ์ถ๋ ฅํด์ผํจ
// itemobject.printItem ์ฌ์ฉํ์ฌ
// printItem์์ ๋ฐ์ดํฐ ์ ์กํด์ view์ชฝ์์ ์ถ๋ ฅ!
// String -> JSON parser
itemObject.printItem( topic, msg );
}
@Override
public void deliveryComplete(IMqttDeliveryToken arg0) {
// ๋ด๊ฐ ์ ์กํ๋ ๋ฉ์์ง๋ฅผ ์ ํํ ์ ์ก ์๋ฃ ํ์๋
System.out.println("๋ฉ์ธ์ง ์ ์ก์ ์๋ฃ ํ์ ๋");
}
๊ตฌ๋ ๋ฐ ์ถ๋ ฅ
1. ItemView์ ๊ฐ์ฒด๋ฅผ ItemMqttClient์๊ฒ ์ ๋ฌํด์ค
โก๏ธ ๋์ค์printItem()
์ฌ์ฉ์ ์ํดItemMqttClient
์๊ฒ ์์ ์ ๊ฐ์ฒดthis
๋ฅผItemMqttClient
์๊ฒ ์ ๋ฌ
2. ๊ตฌ๋ ํ๊ธฐ
โก๏ธ obj.subscribe();
package com.example.view;
import com.example.broker.ItemMqttClient;
public class ItemView {
public ItemView() {
// 1. ItemMqttClient ํธ์ถ
// ๋์ค์ printItem ์ฐ๊ธฐ ์ํด ItemView์ ๊ฐ์ฒด๋ฅผ ItemMqttClient์๊ฒ ์ ๋ฌ
ItemMqttClient obj = new ItemMqttClient(this);
// 2. ๊ตฌ๋
ํ๊ธฐ
obj.subscribe();
}
// ๋ณ๊ฒฝ๋ด์ฉ์ ์ถ๋ ฅ์ ์ฌ๊ธฐ์
public void printItem(String topic, String msg){
System.out.println(topic + "," + msg);
}
}
AppTest์์ ์ฌ์ฉ์๊ฐ ์ ์กํ ๋ฉ์ธ์ง๋
MqttCallback
์ด ๊ฐ์งํ์ฌmessageArrived
๊ฐ ๋ฐ๋๋ค
...
public class AppTest
{
// ์์ดํ
์๋น์ค ๊ฐ์ฒด ์์ฑ
ItemService iService = new ItemServiceImpl();
// ๋คํธ์ํฌ mqtt ๊ฐ์ฒด ์์ฑ
ItemMqttClient mqttClient = new ItemMqttClient(null);
@Test
public void insert()
{ //๋ฌผํ ๋ฑ๋ก
Item item = new Item();
item.setNo(17L);
item.setName("err");
item.setPrice(8860L);
// ์๋น์ค๋ฅผ ํตํด ์ถ๊ฐ insertItem
iService.insertItem(item);
// JSON๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ sendMessage์ ๋ณด๋ด๊ธฐ
JSONObject jobj = new JSONObject();
jobj.put("type", 1);
mqttClient.sendMessage(jobj.toString());
mqttClient.sendMessage( item.getNo() + "๋ฒ ํญ๋ชฉ์ ์ถ๊ฐํ์ต๋๋ค");
}
@Test
public void update()
{ //๋ฌผํ ์์
Item item = new Item(6L, "MMM", 1500L, null);
// ์๋น์ค ํธ์ถํ์ฌ ์์ updateItem
iService.updateItem(item);
// json๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ณด๋ด๊ธฐ
JSONObject jobj = new JSONObject();
jobj.put("type", "update");
mqttClient.sendMessage(jobj.toString());
}
@Test
public void delete()
{ // ๋ฌผํ ์ญ์
Item item = new Item();
item.setNo(15L);
iService.deleteItem(item);
// json๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ณด๋ด๊ธฐ
JSONObject jobj = new JSONObject();
jobj.put("type", "delete");
// mqttClient.sendMessage(jobj.toString());
mqttClient.sendMessage(item.getNo() + "๋ฒ ํญ๋ชฉ์ ์ญ์ ํ์ต๋๋ค");
}
}